Encryption 传递CryptoJS AES加密密钥的静态值安全吗?

Encryption 传递CryptoJS AES加密密钥的静态值安全吗?,encryption,base64,aes,cryptojs,Encryption,Base64,Aes,Cryptojs,我想用crypto js AES加密对所有表单数据进行加密。将加密密钥值保存在客户端是否合适,如下所示。请建议 var key = CryptoJS.enc.Utf8.parse("234234234DFDFDF343434DFDFDF") , iv = CryptoJS.enc.Utf8.parse("234234324234324") , data = CryptoJS.enc.Utf8.parse(str) , encryptedData = Cryp

我想用crypto js AES加密对所有表单数据进行加密。将加密密钥值保存在客户端是否合适,如下所示。请建议


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
    });


不,这通常是不安全的

首先,你错误地陈述了你的目标。AES加密不是目的,而是达到目的的手段。您要做的是对表单数据保密。表单数据在加密术语中称为“消息”

如果需要将消息发送到服务器,然后让服务器拥有解密的表单,则需要传输安全性。最好使用TLS。通常,JavaScript没有任何方法来创建与服务器的信任关系(您的浏览器使用它的证书存储和受信任的证书)。因此,在这种情况下,您不能依赖JavaScript安全性

有时,您希望阻止前端对消息进行解密。在这种情况下,您可以通过安全通道发送公钥,如RSA公钥。然后可以使用RSA和AES(混合加密)对表单数据进行加密。您的后端将能够解密消息。但是,如果前端发送了错误的密钥,此方案仍然会失败,因为消息将使用另一方的公钥进行加密。因此,这假设前端软件不容易被黑客攻击(或者被另一台服务器完全取代,从而破坏通信)


即使您可以使用受信任的AES密钥,那么使用CBC进行传输模式安全肯定会启用明文或填充oracle攻击。你对加密技术缺乏太多的经验,无法实现这一点。使用TLS,这很难(要确保安全,使用它相对容易)。

假设您要加密从客户端到服务器的发布数据。您拥有的最佳和最安全的选项是使用TLS(https)。