1

.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
4

1 に答える 1