Javascript - 如何保护用于在客户端加密的密钥

时间:2016-10-21 11:48:48

标签: javascript security encryption

我正在使用CryptoJS(AES)在客户端加密一些重要内容。我正在使用的代码如下:

   function encrypt(value) {
     var keyIV = 'Ei9sHWE25Jiol77Q';
     return CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(value), CryptoJS.enc.Utf8.parse(keyIV),
     {   keySize: 256 / 8,
        iv: CryptoJS.enc.Utf8.parse(keyIV),
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
     }).toString();
}

但正如您所见,任何人都可以看到用于加密的密钥。我如何制作这种关键的安全或非人类可读格式或任何其他技巧,以确保密钥是安全的?

2 个答案:

答案 0 :(得分:1)

您需要提供有关您尝试做什么以及您的疑虑的详细信息。

例如:

  • 如果客户端也应该能够对他们正在加密的数据进行解密,那么公钥加密是不可能的(除非客户要求服务器为他们解密数据,但那么客户端是什么?加密点,如果服务器很容易为你解密一切?)
  • 您是否担心客户解密其他客户的数据?如果是这样,您的服务器可以为每个客户端生成不同的密钥吗?服务器是否能够解密客户端的数据(因此需要所有密钥的副本)?

在安全方面很少有绝对正确的答案。有不同的工具可用于不同的目的。

答案 1 :(得分:-2)

如果您只担心密钥,请使用非对称加密。您只需要在客户端存储公钥。

加密数据保存并且无法通过操作进行处理,您可以使用私钥在服务器端对其进行解密。