C#与C++代码使用3DES加解密交互,出现解密不成功的尴尬局面
按照需求,C#发送3DES加密后的数据至C++后解密,C++回复加密数据后C#解密。
现在出现了一个很诡异的事情,C#的加密,C++解密正常;C#的加密,C#解密正常;C++的加密,C++解密正常;可到了C++的加密,C#解密却出现了乱码现象。下面贴C#的代码,我觉得是C#这部分的原因:
public class DES3
{
public DES3()
{
}
private const string sKey = "ManUtd4ManCity5Arsenal17Chelsea3";
//矢量,矢量可以为空
private const string sIV = "qcDY6X+aPLw=";
//构造一个对称算法
#region public string EncryptString(string Value)
/// 加密字符串
/// 输入的字符串
/// 加密后的字符串
public static byte[] EncryptString(byte[] byt)
{
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
//byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
//指定加密的运算模式
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
//获取或设置加密算法的填充模式
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
//byt = Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return ms.ToArray();
}
#endregion
#region 解密
/// 加密字符串
/// 输入的字符串
/// 加密后的字符串
public static byte[] DecryptString(byte[] byt)
{
try
{
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
//byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
//指定加密的运算模式
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
//获取或设置加密算法的填充模式
mCSP.Padding = System.Security.Cryptography.PaddingMode.Zeros;
ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
//byt = Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return ms.ToArray();
}
catch
{
throw;
}
}
#endregion
}