【发布时间】:2014-04-20 23:08:11
【问题描述】:
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
假设加密和解密阶段是分开的(发生在程序的不同部分),有什么方法可以检查"Secret Passphrase" 在解密阶段是否正确?
我注意到使用错误的密码进行解密会导致decrypted.toString() 成为空字符串。如果原始消息也是一个空字符串怎么办?没有其他参数可以用来检查密码是否确实正确吗?
附注
我当前的解决方案:始终创建一个非空的控制值,用密码加密。如果控制值解密为“”,则密码不正确。
编辑:结果我的解决方案不起作用。非常相似的密码短语将消息解密为不同的值,这些值仍然不同于空字符串。安全性没有受到影响,但我仍然无法查看密码是否正确。
this is my very cool key! 和 this is my very cool key!! 都返回一个字符串,尽管只有第一个是用于加密的实际密码。
编辑 2:从错误密码返回的字符串不是有效的 UTF-8。因此,调用 value.toString(CryptoJS.enc.Utf8) 会返回错误。我可以使用此错误来检查密码是否正确。不过,这种解决方案非常糟糕!
【问题讨论】:
标签: javascript encryption cryptojs