我想用加密js AES加密来加密我所有的表单数据。像below.Kindly建议的那样,将加密密钥值保留在客户端好吗?
var key = CryptoJS.enc.Utf8.parse("234234234DFDFDF343434DFDFDF")
, iv = CryptoJS.enc.Utf8.parse("234234324234324")
, data = CryptoJS.enc.Utf8.parse(str)
, encryptedData = CryptoJS.AES.encrypt(data, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});发布于 2019-05-10 12:59:33
不,这通常不安全。
首先,你错误地陈述了你的目标。AES加密不是目标,而是达到目的的手段。您想要做的是将表单数据保密。表单数据在密码术语中称为“消息”。
如果需要将消息发送到服务器,然后让服务器具有解密形式,则需要传输安全性。最好用TLS来做这个。通常,JavaScript没有任何方法来创建与服务器的信任关系(您的浏览器使用它的证书存储区,其中包含可信的证书)。因此,在这种情况下,您不能依赖JavaScript安全性。
有时,您希望防止前端解密消息。在这种情况下,您可以通过安全通道发送公钥,例如RSA公钥。然后,您可以使用RSA和AES (混合加密)加密表单数据。您的后端将能够解密消息。但是,如果前端发送错误的密钥,则此方案仍然失败,因为消息将使用来自另一方的公钥加密。因此,这假设前端软件不可能轻易被黑客攻击(或者完全被另一台服务器所取代,从而破坏流量)。
即使您可以使用可信的AES密钥,那么使用CBC进行传输模式安全肯定会启用明文或填充oracle攻击。你太缺乏密码技术的经验了。使用TLS,这就足够困难了(为了安全起见,使用它相对容易)。
https://stackoverflow.com/questions/56058546
复制相似问题