Jos*_*ita 4 javascript encryption cryptography aes cryptojs
对于使用CryptoJS加密某些东西浪费了很多时间,我感到非常沮丧,一段时间之后,我意识到每次使用相同的输入加密结果都是不同的!这怎么可能?
这是我的代码,您可以检查是否为真:https : //jsfiddle.net/z5dg623q/1/
<script>
function encrypt() {
document.getElementById("stringOutput").value = CryptoJS.AES.encrypt("lorem ipsum", "hAPgT2mj0ZzD1epO").toString();
}
</script>
<textarea id="stringOutput" cols="100" rows="10"></textarea>
<button type="button" onClick="encrypt()">Encrypt that!</button>
Run Code Online (Sandbox Code Playgroud)
有谁能够帮助我?
当您将两个字符串传递给CryptoJS.<Cipher>.encrypt()您时,您告诉CryptoJS使用基于密码的加密。假定第一个字符串是UTF-8编码的数据,第二个字符串是密码,该密码将通过MD5发送以获取256位密钥和128位IV。这由所谓的EvpKDF(请参阅1和2)使用随机盐(请参见此处)完成。
这意味着在每次调用中,代码都将生成一个新的随机盐,该盐将每次用于导出不同的密钥和IV,从而每次均导致不同的密文。此属性称为语义安全性,它例如防止攻击者仅通过查看密文来确定明文是否相等。有时这是至关重要的安全属性。
当你调用toString()的encrypt()结果,它会序列密文成OpenSSL兼容的格式,其中包括盐。因此,您只需要密码和该字符串即可对其进行解密。
当您尝试对其进行解密时,密文中的盐和密码将用于导出与加密时相同的密钥和IV。因此,它可以恢复原始的纯文本。如果使用了错误的密码,结果将为空或乱码。
| 归档时间: |
|
| 查看次数: |
2557 次 |
| 最近记录: |