.NET の RC2CryptoServiceProvider は OpenSSL に準拠していますか。CBC で RC2CryptoServiceProvider を使用していますが、同じテキストの暗号化された値 (同じキーと初期ベクトルを使用) は、nodejs 暗号ライブラリの rc2-cbc が生成するものとは異なります。Node js 暗号ライブラリは OpenSSL に準拠しています。
誰かがこの不一致について既に質問していましたが、まだ回答がありません - Node.JS RC2-CBC 暗号化と復号化の暗号が C# と一致しません
RC2CryptoServiceProvider の完全なソース コードを教えてもらえますか? 暗号化/復号化コードは、C# で利用できる完全に管理されたものですか、それともその下で C++ を使用していますか?
ノードjsで.NETアプリケーションの暗号化された文字列を解読する方法を探しているので、違いを見つけることに興味があります。
以下は、C# コードと対応するノード js コードです。同じデータ (HelloWorld)、キー、および 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