.NET 的 RC2CryptoServiceProvider 是否符合 OpenSSL。我将 RC2CryptoServiceProvider 与 CBC 一起使用,但相同文本的加密值(使用相同的密钥和初始化向量)与 nodejs 加密库的 rc2-cbc 产生的不同。Node js 加密库符合 OpenSSL。
有人已经问过这个差异,但还没有答案 - Node.JS RC2-CBC 加密和解密密码与 C# 不匹配
有人可以指点我完整的源代码 RC2CryptoServiceProvider 吗?加密/解密代码是 C# 中可用的完全托管代码,还是在下面使用 C++?
我有兴趣找到差异,因为我正在寻找一种方法来解密节点 js 中的 .NET 应用程序加密字符串。
下面是C#代码和对应的node js代码。对于相同的数据(HelloWorld),key和iv,产生的加密值是不同的。
public static string Encrypt(string data, string key, string iv)
{
try
{
byte[] ivBytes = Encoding.ASCII.GetBytes(iv);
byte[] keyBytes = Encoding.ASCII.GetBytes(key);
byte[] dataBytes = Encoding.ASCII.GetBytes(data);
RC2 rc = new RC2CryptoServiceProvider();
rc.Mode = CipherMode.CBC;
rc.Key = keyBytes;
rc.IV = ivBytes;
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, rc.CreateEncryptor(), CryptoStreamMode.Write);
stream2.Write(dataBytes, 0, dataBytes.Length);
stream2.Close();
return Convert.ToBase64String(stream.ToArray());
}
catch
{
return string.Empty;
}
}
下面是节点js代码。
algo = 'rc2-cbc'
key = '1234567890'
iv = 'someInit'
keyBuffer = new Buffer(key)
ivBuffer = new Buffer(iv)
cipher = crypto.createCipheriv(algo, keyBuffer, ivBuffer)
textBuffer = new Buffer('HelloWorld')
encrypted = cipher.update(textBuffer)
encryptedFinal = cipher.final()
encryptedText = encrypted.toString('base64') + encryptedFinal.toString('base64')
console.log encryptedText