Websockets聊天消息加密与AES,Crypto.js和.NET
Websockets chat message encryption with AES, Crypto.js and .NET
所以,我用 Websockets 和 ASP 开发了一个用户聊天。服务器上的 MVC。
我想加密从 websocket 发送和接收的所有消息(使用 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);
加密.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格式化输出。如果您使用基于密码的加密,它会在其中包含盐,但似乎您没有。如果要确保仅交换密文,请将其编码为 Base64 中的CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
,而不是使用 encrypted.toString()
。
如果您使用的是 aes 汇总,请不要忘记在您的页面中包含 mode-cfb.js,因为其中仅包含 CBC。
相关文章:
- 混淆Crypto.JS密码短语
- 在iOS应用程序的分析云代码上运行crypto-js的问题
- 通过Crypto.js获取文件的md5sum
- crypto-js如何隐藏类方法
- 将C#Cryptography.Rijndael加密转换为Javascript(pref.crypto-js)
- Websockets聊天消息加密与AES,Crypto.js和.NET
- 使用crypto-js加密密码并通过ajax发送表单(并在java中解密),我得到:类型错误:无法读取未定义的属性“单词
- AES - Crypto JS & PHP
- AES解密在伪造中失败,但在crypto-js中工作
- 在钛中使用Crypto-JS(commonjs)
- 在使用密码加密消息时,crypto-js 在内部使用的 AES 参数和步骤是什么
- 使用Crypto-js对元素内容进行哈希处理
- crypto-js和pycrypto中的AES问题
- 使用crypto.js创建文本表单生成器
- 在流星中使用Crypto.js
- Crypto.js在字节数组中使用key和iv(vector)进行解密
- crypto-js-DES(或Triple-DES)CBC模式下的加密
- Node.js - crypto.js - PFX报头太长
- Crypto-Js不同于mcrypt的输出,当数据发生变化时进行加密
- Crypto-Js不同于mcrypt的输出