Cat*_*ish 8 javascript encryption node.js cryptojs
我正在尝试使用crypto-js和使用AES类型的加密来加密某些东西.
我遇到的问题是每次加密时我的加密值都不同.
通过这个简单的例子,我运行相同的加密5次不同,我得到5个不同的结果.Wtf在这里发生了什么?
task.js
var AES = require('crypto-js/aes');
var key = "abc123";
var secret = "encryptThisWord";
console.log(AES.encrypt(secret, key).toString());
console.log(AES.encrypt(secret, key).toString());
console.log(AES.encrypt(secret, key).toString());
console.log(AES.encrypt(secret, key).toString());
console.log(AES.encrypt(secret, key).toString());
Run Code Online (Sandbox Code Playgroud)

Ole*_*hin 12
检查内容AES.encrypt(secret, key)- 它是一个具有许多字段iv且salt特别感兴趣的对象(jsFiddle).
每次运行AES.encryptcrypto-js时都会选择新的IV和新盐(顺便提一下,你可以提供自己的值).随机IV意味着即使使用相同的密钥,输出也会不同,随机盐意味着实际的加密密钥也不同,因为它来自密码和盐.
你可以(实际上,应该)问为什么加密密钥和IV都不同时前十个Base64输出字符是相同的?这是因为调用toString()ecnryption结果将其转换为"OpenSSL兼容字符串",基本上Base64("Salted__" + salt + ciphertext),其中"Salted__"是常量前缀,当然,它在Base64输出中引导相同的前缀.
| 归档时间: |
|
| 查看次数: |
2035 次 |
| 最近记录: |