Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RC2CryptoServiceProvider.NET算法与node js rc2算法的差异_C#_.net_Cryptography_Rc2 Cipher - Fatal编程技术网

C# RC2CryptoServiceProvider.NET算法与node js rc2算法的差异

C# RC2CryptoServiceProvider.NET算法与node js rc2算法的差异,c#,.net,cryptography,rc2-cipher,C#,.net,Cryptography,Rc2 Cipher,.NET的RC2CryptoServiceProvider是否符合OpenSSL。我将RC2CryptoServiceProvider与CBC一起使用,但是使用相同密钥和初始向量的相同文本的加密值与nodejs加密库的RC2CBC生成的值不同。Node js加密库符合OpenSSL 有人已经问过这个差异,但还没有回答- 有人能告诉我完整的源代码RC2CryptoServiceProvider吗?加密/解密代码是完全可用的,在C中可用还是在C++下面使用?p> 我感兴趣的是找出差异,因为我正在寻找

.NET的RC2CryptoServiceProvider是否符合OpenSSL。我将RC2CryptoServiceProvider与CBC一起使用,但是使用相同密钥和初始向量的相同文本的加密值与nodejs加密库的RC2CBC生成的值不同。Node js加密库符合OpenSSL

有人已经问过这个差异,但还没有回答-

有人能告诉我完整的源代码RC2CryptoServiceProvider吗?加密/解密代码是完全可用的,在C中可用还是在C++下面使用?p> 我感兴趣的是找出差异,因为我正在寻找一种方法来解密节点js中的.NET应用程序加密字符串

下面是C代码和相应的节点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

我遇到了类似的情况。现有的.NET核心代码使用RC2CryptoServiceProvider对字符串进行解密。我想在节点中复制这个

NET代码使用keysize 128,这似乎也是默认值,因此我假设节点openssl中的类似算法是rc2-128。但解密时,这总是失败


经过一些尝试和错误,我发现在节点中使用rc2-64算法的行为与使用keysize 128的.NET代码相同。别问我为什么

你可能会有更好的运气发布2个版本的加密代码,让别人发现你做错了什么,可能是编码问题。即使您获得了阅读加密代码的来源,但如果不投入大量时间,也不太可能对您有所帮助…使用加密时最常见的错误是在所有写入操作完成后,在关闭之前忘记在加密流上调用FlushFinalBlock方法,但这只是一个猜测,因为您尚未发布任何代码。感谢您的评论,我已经在C和NodeJS中发布了代码