因此,我使用Websockets开发了一个用户聊天,并在服务器上使用了ASP.MVC。
我想加密所有从websockets发送和接收的消息(使用AES)。为此,我尝试在发送之前对用户消息进行加密(使用Crypto.js),并在服务器上解密(使用Security.Cryptography .net)。
问题是,客户端上的加密消息与服务器上的加密消息不同(客户端和用户上的消息、密钥和初始化向量相同)。
这是一种进行websockets消息加密的好方法吗?你还会推荐我什么其他的解决方案?
CryptoJS:
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`s Security.Cryptography是:
kLApirWt1VcVu3tTuAizgA==我在两边都使用相同的键和无效向量。有什么问题吗?
发布于 2015-01-21 12:52:30
我假设您希望使用CFB模式,因为您在您的JavaScript代码中引用了这一点,而EncryptStringToBytes_Aes已经这样做了。
将模式放入第一个config对象中。没有第二个:
var encrypted = CryptoJS.AES.encrypt("Message", communicationKey, {
iv : communicationIV,
mode: CryptoJS.mode.CFB
});此外,CryptoJS使用OpenSSLFormatter对输出进行格式化。如果您使用基于密码的加密,则其中包含一个salt,但似乎没有。如果要确保只交换密文,请将其编码为CryptoJS.enc.Base64.stringify(encrypted.ciphertext),而不是使用encrypted.toString()。
如果您使用的是aes汇总,请不要忘记在页面中包含mod-cfb.js,因为只有CBC包含在其中。
https://stackoverflow.com/questions/28066979
复制相似问题