user-0 提问: 请教下各位大神，为什么我请求返回的报文base64用在线的解码器解不了，用程序也解不了

回复:
user: user-0
content: 引用 18 楼 user-2 的回复:DES是对称加密算法，哪来什么公私钥，只有非对称加密算法才有公私钥 [quote=引用 16 楼 Chi King Chang 的回复:] [quote=引用 12 楼 stherix 的回复:] [quote=引用 11 楼 Chi King Chang 的回复:] 这是他边提供的C#解码编码  和他的php代码根本对不上 php用的3des加密 c#代码用的des解密 秘钥处理方式也不一样[/quote] 採用 DES 簽名，加密因子為指定（參考後面的文件）XML 報文，DES 加密後需再用 Base64 進行編碼。（由公司為您提供公私碼， 其中私碼用於您返回報文時的簽名，公碼用於驗證公司發送 的查詢的結果。）  这里意思是des解密的时候的Key值应该用他提供给我的公码是吧？[/quote][/quote] 询问过后他说加密解密都是使用53MP236N这个Key值，而且上面返回的base64码他们也说解码不成功，说是我这边发送的request有问题，有没有可能是因为两边开发平台不一致导致的？加之我把程序加密后的base64代码放去在线解码的工具上，好像都解不出来。

user: user-1
content: 引用 18 楼 user-2 的回复:DES是对称加密算法，哪来什么公私钥，只有非对称加密算法才有公私钥  他这里的公私码和通常意义上的不一样 指的是发出去的和发回去的用的不是同一个秘钥

user: user-0
content: 引用 18 楼 user-2 的回复:DES是对称加密算法，哪来什么公私钥，只有非对称加密算法才有公私钥 [quote=引用 16 楼 Chi King Chang 的回复:] [quote=引用 12 楼 stherix 的回复:] [quote=引用 11 楼 Chi King Chang 的回复:] 这是他边提供的C#解码编码  和他的php代码根本对不上 php用的3des加密 c#代码用的des解密 秘钥处理方式也不一样[/quote] 採用 DES 簽名，加密因子為指定（參考後面的文件）XML 報文，DES 加密後需再用 Base64 進行編碼。（由公司為您提供公私碼， 其中私碼用於您返回報文時的簽名，公碼用於驗證公司發送 的查詢的結果。）  这里意思是des解密的时候的Key值应该用他提供给我的公码是吧？[/quote][/quote] 是的，只有非对称算法才要公私码，小白学到了.

user: user-2
content: DES是对称加密算法，哪来什么公私钥，只有非对称加密算法才有公私钥 引用 16 楼 Chi King Chang 的回复:[quote=引用 12 楼 stherix 的回复:] [quote=引用 11 楼 Chi King Chang 的回复:] 这是他边提供的C#解码编码  和他的php代码根本对不上 php用的3des加密 c#代码用的des解密 秘钥处理方式也不一样[/quote] 採用 DES 簽名，加密因子為指定（參考後面的文件）XML 報文，DES 加密後需再用 Base64 進行編碼。（由公司為您提供公私碼， 其中私碼用於您返回報文時的簽名，公碼用於驗證公司發送 的查詢的結果。）  这里意思是des解密的时候的Key值应该用他提供给我的公码是吧？[/quote]

user: user-1
content: 引用 16 楼 Chi King Chang 的回复:[quote=引用 12 楼 stherix 的回复:] [quote=引用 11 楼 Chi King Chang 的回复:] 这是他边提供的C#解码编码  和他的php代码根本对不上 php用的3des加密 c#代码用的des解密 秘钥处理方式也不一样[/quote] 採用 DES 簽名，加密因子為指定（參考後面的文件）XML 報文，DES 加密後需再用 Base64 進行編碼。（由公司為您提供公私碼， 其中私碼用於您返回報文時的簽名，公碼用於驗證公司發送 的查詢的結果。）  这里意思是des解密的时候的Key值应该用他提供给我的公码是吧？[/quote]  看他的说法,应该是把

user: user-0
content: 引用 12 楼 stherix 的回复:[quote=引用 11 楼 Chi King Chang 的回复:] 这是他边提供的C#解码编码  和他的php代码根本对不上 php用的3des加密 c#代码用的des解密 秘钥处理方式也不一样[/quote] 採用 DES 簽名，加密因子為指定（參考後面的文件）XML 報文，DES 加密後需再用 Base64 進行編碼。（由公司為您提供公私碼， 其中私碼用於您返回報文時的簽名，公碼用於驗證公司發送 的查詢的結果。）  这里意思是des解密的时候的Key值应该用他提供给我的公码是吧？

user: user-0
content: 引用 12 楼 stherix 的回复:[quote=引用 11 楼 Chi King Chang 的回复:] 这是他边提供的C#解码编码  和他的php代码根本对不上 php用的3des加密 c#代码用的des解密 秘钥处理方式也不一样[/quote]而且有点疑问的是，为什么他用的是ebc模式也需要初始化向量

user: user-0
content: 引用 12 楼 stherix 的回复:[quote=引用 11 楼 Chi King Chang 的回复:] 这是他边提供的C#解码编码  和他的php代码根本对不上 php用的3des加密 c#代码用的des解密 秘钥处理方式也不一样[/quote]已经询问了，看看后续吧

user: user-1
content: 引用 11 楼 Chi King Chang 的回复:这是他边提供的C#解码编码  和他的php代码根本对不上 php用的3des加密 c#代码用的des解密 秘钥处理方式也不一样

user: user-0
content: 这是他边提供的C#解码编码  #region DESEncrypt DES加密  /// <summary>  /// 进行DES加密。  /// </summary>  /// <param name="pToEncrypt">要加密的字符串。</param>  /// <param name="sKey">密钥，且必须为8位。</param>  /// <returns>以Base64格式返回的加密字符串。</returns>  public static string DESEncrypt(string pToEncrypt, string sKey)  {  using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())  {  byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);  des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);  des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  System.IO.MemoryStream ms = new System.IO.MemoryStream();  using (CryptoStream cs = new CryptoStream(ms,  des.CreateEncryptor(), CryptoStreamMode.Write))  {  cs.Write(inputByteArray, 0, inputByteArray.Length);  cs.FlushFinalBlock();  cs.Close();  }  string str = Convert.ToBase64String(ms.ToArray());  ms.Close();  return str;  }  }  #endregion  #region DESDecrypt DES解密  /// <summary>  /// 进行DES解密。  /// </summary>  /// <param name="pToDecrypt">要解密的以Base64</param>  /// <param name="sKey">密钥，且必须为8位。</param> /// <returns>已解密的字符串。</returns>  public static string DESDecrypt(string pToDecrypt, string sKey)  {  byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);  using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())  {  des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);  des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  System.IO.MemoryStream ms = new System.IO.MemoryStream();  using (CryptoStream cs = new CryptoStream(ms,  des.CreateDecryptor(), CryptoStreamMode.Write))  {  cs.Write(inputByteArray, 0, inputByteArray.Length);  cs.FlushFinalBlock();  cs.Close();  }  string str = Encoding.UTF8.GetString(ms.ToArray());  ms.Close();  return str;  }  }  #endregion

user: user-0
content: 引用 9 楼 stherix 的回复:用它的php解密出来也是乱码 应该不是文本 根据他的协议文档来说就是解出来是xml，我这边已经给他报文叫他那边解析一下了。

user: user-1
content: 用它的php解密出来也是乱码 应该不是文本

user: user-0
content: 引用 3 楼 user-2 的回复:你用的不是DES-ECB模式么，和base64不是一种吧 DES-EBC模式在使用选项-a的时候不是能使用base64解码吗？  这是我网上看到的原话：-a和-A选项：对文件进行BASE64编解码操作

user: user-0
content: 引用 6 楼 stherix 的回复:[quote=引用 5 楼 Chi King Chang 的回复:] [quote=引用 1 楼 stherix 的回复:] 你确认加密方法 passphrase 都是对的吗 文件也是完整的吗 这是我HTTPRequest 对方返回的报文，解密方法的话用了openssl下面的des-ecb指令解码，但是返回输出bad magic[/quote]  你问了对方是-des-ecb加密的吗,passphrase也是53MP236N?[/quote]  我问了对方 对方说对返回的报文是先进行base64解码再用des解密 下面是对方提供的php解密加密代码 //$input - stuff to decrypt //$key - the secret key to use function do_mencrypt($input, $key) { $input = str_replace(""n", "", $input); $input = str_replace(""t", "", $input); $input = str_replace(""r", "", $input); $key = substr(md5($key), 0, 24); $td = mcrypt_module_open('tripledes', '', 'ecb', ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $key, $iv); $encrypted_data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); return trim(chop(base64_encode($encrypted_data))); } //$input - stuff to decrypt //$key - the secret key to use function do_mdecrypt($input, $key) { $input = str_replace(""n", "", $input); $input = str_replace(""t", "", $input); $input = str_replace(""r", "", $input); $input = trim(chop(base64_decode($input))); $td = mcrypt_module_open('tripledes', '', 'ecb', ''); $key = substr(md5($key), 0, 24); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $key, $iv); $decrypted_data = mdecrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); return trim(chop($decrypted_data)); }

user: user-1
content: 引用 5 楼 Chi King Chang 的回复:[quote=引用 1 楼 stherix 的回复:] 你确认加密方法 passphrase 都是对的吗 文件也是完整的吗 这是我HTTPRequest 对方返回的报文，解密方法的话用了openssl下面的des-ecb指令解码，但是返回输出bad magic[/quote]  你问了对方是-des-ecb加密的吗,passphrase也是53MP236N?

user: user-0
content: 引用 1 楼 stherix 的回复:你确认加密方法 passphrase 都是对的吗 文件也是完整的吗 这是我HTTPRequest 对方返回的报文，解密方法的话用了openssl下面的des-ecb指令解码，但是返回输出bad magic

user: user-0
content: DES-EBC模式在使用选项-a的时候不是能使用base64解码吗？  这是我网上看到的原话：-a和-A选项：对文件进行BASE64编解码操作

user: user-2
content: 你用的不是DES-ECB模式么，和base64不是一种吧

user: user-1
content: 你确认加密方法 passphrase 都是对的吗 文件也是完整的吗

user: user-0
content: 用了linux自带的命令也不行 openssl enc -d -a -k 53MP236N -des-ecb -in return_decode.txt -out  return_encode.txt