Javascript 发送';秘密密码短语';(key/iv)使用CryptoJS时

Javascript 发送';秘密密码短语';(key/iv)使用CryptoJS时,javascript,encryption,cryptography,cryptojs,Javascript,Encryption,Cryptography,Cryptojs,在上传到服务器之前,我使用CryptoJs对客户端的文件进行加密。加密和解密正在工作,但我的问题是这有多安全。在我的javascript中,我将“secret passphrase”作为参数传递给encrypt函数。我解密时使用的也是相同的密码短语。那么,如果有人能掌握这个“秘密密码短语”,他们难道不能轻松地解密数据吗 Crytpjs: var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase"); var decryp

在上传到服务器之前,我使用CryptoJs对客户端的文件进行加密。加密和解密正在工作,但我的问题是这有多安全。在我的javascript中,我将“secret passphrase”作为参数传递给encrypt函数。我解密时使用的也是相同的密码短语。那么,如果有人能掌握这个“秘密密码短语”,他们难道不能轻松地解密数据吗

Crytpjs:

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");

AES是一种对称加密算法。这意味着用于加密和解密的密钥(秘密密码短语)是相同的

因此,它的安全性主要依赖于保持密钥的安全性。如果有人获得了密钥,他们将能够解密使用该密码短语加密的任何内容


我通常建议,如果要共享加密数据,则通过一个通道(电子邮件或云服务器)共享数据,并通过另一个通道(whatsapp、电话等)发送密钥。

如果您的要求是上传的文件要加密,但对服务器可见,那么您应该使用TLS。没有理由使用其他任何东西


如果您的要求是对上传的文件进行加密,即使服务器也无法解密,那么只需向用户请求密码,应用PBKDF2,并将结果用作密钥


如果您要保留当前代码,则有一些内容需要更改。目前,您似乎正在使用ECB模式(您不提供静脉注射)。ECB模式不安全,不应使用。此外,您需要一种方法来确保数据在传输过程中没有被更改。您应该应用HMAC并将其附加到末尾。

通过使用解决。这是一种隐藏脚本内容的巧妙方法。

如果有人要获取加密中使用的盐,并且知道您使用的加密方式,他们可以对其进行解密,但这对于所有加密都是一样的。如果有人拥有您房子的钥匙,他可能能够进入其中,如果他能找到门,请牢记这一点,这就是为什么最好在允许的情况下,让salt包含一个随机的字符串。你能详细说明一下cryptojs吗?@Noob在这种情况下的秘密短语是salt。让它成为一个没有人能猜到的字符串,所以如果你为X公司工作,那么使用“CompanyX”作为密码将不是一个好主意。创建一个随机字符串。即使我没有随数据一起发送密钥,因为这是javascript,所以很容易找到,对吗?我的意思是,在浏览器中,如果有人执行F12,您可以看到脚本中的所有值。我仍在将加密对象本身发送到服务器。正确!避免这种情况的一种方法是让用户在加密文件之前键入其密钥。另一个是生成一个随机密钥,并告诉用户将其写下来。我的要求是在上传之前对文件进行加密。所以客户端加密。它在服务器上也不应该是可读的。从服务器上,我解密原始文件并将其发送到存储库。。。它不应该在服务器上可见,但服务器仍然解密它?这是哪一个?听起来你只需要TLS。请注意,根据定义,混淆也是完全可逆的,并且不提供任何级别的安全性。