使用AES在Crypto.js和.NET Cryptography中进行不同的加密

时间:2015-01-22 08:19:32

标签: javascript c# .net encryption cryptography

我正在尝试加密来自客户端的邮件并在服务器上解密它。我把AES密钥和iv放在用户cookie中。

问题是来自Crypto.js的加密字符串是G0eNQap/h6u+7566MTOH3w==,来自.NET的加密字符串是F7RemlJeNBhcaZ/FjCK4xw==它具有相同的长度,但不是相同的值。

我猜我在编码方面做错了。 你能否指出错误?提前致谢。

Crypto.js

var communicationKey = CryptoJS.enc.Base64.parse(getCookie("SessionKey"));
    var communicationIV = CryptoJS.enc.Base64.parse(getCookie("IV"));

var encrypted = CryptoJS.AES.encrypt("Message", communicationKey, {
        iv: communicationIV,
        mode: CryptoJS.mode.CFB
    });

console.log("Result: " + CryptoJS.enc.Base64.stringify(encrypted.ciphertext));

.NET:

string key = context.Cookies["SessionKey"].Value;
newUser.UserKey = Convert.FromBase64String(key);

string iv = context.Cookies["IV"].Value;
newUser.InitializationVector = Convert.FromBase64String(iv);

byte[] encryptedMessage = EncryptStringToBytes_Aes("Message", source.UserKey, source.InitializationVector);

1 个答案:

答案 0 :(得分:3)

在您的js代码中,您使用的是CryptoJS.mode.CFB

如果您的EncryptStringToBytes_Aes是MSDN示例的完全副本 - 那么它使用CBC AES加密模式(它是AESManaged的默认模式)。

因此,您必须更改js或C#代码,因为它们都使用相同的加密模式。