wai*_*ler 1 javascript cryptojs
以下代码通过脚本标签在网页上运行。每次我加载页面或在浏览器控制台中运行代码时 - 我都会得到不同的价值......
var key = 'key-123:456';
var uid = 1234567890;
var encrypted = CryptoJS.AES.encrypt(id, key);
encrypted.toString();
Run Code Online (Sandbox Code Playgroud)
无论我加载页面或在控制台中运行代码多少次,如何为“单个 ID”提供单个“加密值”?
AES 是一种“块”密码,这意味着它在从明文到密文(反之亦然)的固定长度块上进行确定性操作。但是,通常(并且通常首选)使用“操作模式”为加密过程添加不确定性。例如,CBC 模式(CryptoJS 默认使用)在加密之前(并且相应地,在解密之后)将随机初始化向量与明文进行异或:
这是非常受欢迎的,因为否则窃听者可以检测到重复的块,这可能允许攻击者最终了解正在通信的内容 - 撤消加密的全部内容。
但是,听起来您希望您的加密具有此特定弱点,这向我表明您可能根本不想要加密。相反,您可能需要一个hash,这是一种确定性的单向转换。(CryptoJS 支持多种散列。)使用散列,给定的输入A将始终散列到相同的散列值H,因此您可以比较Hash(A) == Hash(B)以查看是否A == B。(这不是一个完美的比较,因为散列具有无限的输入空间和有限的输出空间,但散列是有意设计的,因此很难找到产生相同输出的两个输入。)这就是网站安全存储的方式您的密码:服务商店Hash(password)而不是password本身,然后当用户提交密码条目时,站点会比较Hash(entry)并Hash(password)查看条目是否正确。
var hash = CryptoJS.SHA3(message);
Run Code Online (Sandbox Code Playgroud)
但是,如果您确实需要将转换后的值反转回明文而不只是将其与另一个散列值进行比较,那么您确实需要加密。在这种情况下,您可以使用具有上述弱点的加密劣质 ECB 模式。在 CryptoJS 中,你可以通过提供一个带有mode属性的选项对象来做到这一点:
CryptoJS.AES.encrypt(msg, key, { mode: CryptoJS.mode.ECB });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3159 次 |
| 最近记录: |