Crypto.js 和使用 AES 的 .NET 加密中的不同加密
Different encryption in Crypto.js and .NET Cryptography using AES
我正在尝试加密来自客户端的消息并在服务器上对其进行解密。我将 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);
在您的 js 代码中,您使用的是 CryptoJS.mode.CFB
。
如果您的 EncryptStringToBytes_Aes
是 MSDN 示例的精确副本 - 那么它使用 CBC
AES 加密模式(这是 AESManaged 的默认设置)。
所以你必须更改js或C#代码,因为它们都使用相同的加密模式。
我正在尝试加密来自客户端的消息并在服务器上对其进行解密。我将 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);
在您的 js 代码中,您使用的是 CryptoJS.mode.CFB
。
如果您的 EncryptStringToBytes_Aes
是 MSDN 示例的精确副本 - 那么它使用 CBC
AES 加密模式(这是 AESManaged 的默认设置)。
所以你必须更改js或C#代码,因为它们都使用相同的加密模式。