使用 AES、Crypto.js 和 .NET 对 Websockets 聊天消息进行加密
Websockets chat message encryption with AES, Crypto.js and .NET
所以,我使用 Websockets 开发了一个用户聊天,服务器上 ASP.MVC。
我想加密所有从 websockets 发送和接收的消息(使用 AES)。为此,我尝试在发送之前加密用户消息(使用Crypto.js)并在服务器上对其进行解密(使用Security.Cryptography。净).
问题是客户端上的加密消息与服务器上的加密消息不同(消息、密钥和初始化向量在客户端和用户上是相同的)。
这是进行 websockets 消息加密的好方法吗?您会向我推荐哪些其他解决方案?
加密JS:
var encrypted = CryptoJS.AES.encrypt("Message", communicationKey, { iv : communicationIV}, { mode: CryptoJS.mode.CFB });
.NET 密码学:
byte[] encryptedMessage = EncryptStringToBytes_Aes(decryptedMessage, keyToDecrypt, ivToDecrypt);
return Convert.ToBase64String(encryptedMessage);
Crypto.js加密字符串为:
U2FsdGVkX18wnoGfYzHo2Ms/6CKsRC+cE1fj8ylSPlI=
.NET 的 Security.Cryptography 是:
kLApirWt1VcVu3tTuAizgA==
我在两侧使用相同的密钥和初始化向量。可能是什么问题?
我假设您想使用 CFB 模式,因为您在 JavaScript 代码中引用了它并且 EncryptStringToBytes_Aes
已经这样做了。
将模式放入第一个配置对象。没有第二个:
var encrypted = CryptoJS.AES.encrypt("Message", communicationKey, {
iv : communicationIV,
mode: CryptoJS.mode.CFB
});
此外,CryptoJS 使用 OpenSSLFormatter 格式化输出。如果您使用基于密码的加密,它会在其中包含一个盐,但您似乎没有。如果要确保只交换密文,请将其编码为 CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
到 Base64 而不是使用 encrypted.toString()
.
如果您使用的是 aes 汇总,请不要忘记在您的页面中包含模式-cfb.js,因为其中仅包含 CBC。
所以,我使用 Websockets 开发了一个用户聊天,服务器上 ASP.MVC。
我想加密所有从 websockets 发送和接收的消息(使用 AES)。为此,我尝试在发送之前加密用户消息(使用Crypto.js)并在服务器上对其进行解密(使用Security.Cryptography。净).
问题是客户端上的加密消息与服务器上的加密消息不同(消息、密钥和初始化向量在客户端和用户上是相同的)。
这是进行 websockets 消息加密的好方法吗?您会向我推荐哪些其他解决方案?
加密JS:
var encrypted = CryptoJS.AES.encrypt("Message", communicationKey, { iv : communicationIV}, { mode: CryptoJS.mode.CFB });
.NET 密码学:
byte[] encryptedMessage = EncryptStringToBytes_Aes(decryptedMessage, keyToDecrypt, ivToDecrypt);
return Convert.ToBase64String(encryptedMessage);
Crypto.js加密字符串为:
U2FsdGVkX18wnoGfYzHo2Ms/6CKsRC+cE1fj8ylSPlI=
.NET 的 Security.Cryptography 是:
kLApirWt1VcVu3tTuAizgA==
我在两侧使用相同的密钥和初始化向量。可能是什么问题?
我假设您想使用 CFB 模式,因为您在 JavaScript 代码中引用了它并且 EncryptStringToBytes_Aes
已经这样做了。
将模式放入第一个配置对象。没有第二个:
var encrypted = CryptoJS.AES.encrypt("Message", communicationKey, {
iv : communicationIV,
mode: CryptoJS.mode.CFB
});
此外,CryptoJS 使用 OpenSSLFormatter 格式化输出。如果您使用基于密码的加密,它会在其中包含一个盐,但您似乎没有。如果要确保只交换密文,请将其编码为 CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
到 Base64 而不是使用 encrypted.toString()
.
如果您使用的是 aes 汇总,请不要忘记在您的页面中包含模式-cfb.js,因为其中仅包含 CBC。