首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每次使用AES时,密码-js都会返回不同的值。

每次使用AES时,密码-js都会返回不同的值。
EN

Stack Overflow用户
提问于 2014-06-27 15:43:30
回答 2查看 6.6K关注 0票数 12

我试图用密码-js和AES类型的加密来加密一些东西。

我遇到的问题是,每次加密时,我的加密值都是不同的。

使用这个简单的例子,我运行相同的加密5次不同的时间,我得到了5个不同的结果。Wtf要来这里吗?

task.js

代码语言:javascript
复制
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());

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-27 16:55:48

检查AES.encrypt(secret, key)的内容--它是一个有许多字段的对象,ivsalt表示特别感兴趣的内容(jsFiddle)。

每次运行AES.encrypt密码js时,都会选择新的IV和新的salt (顺便说一句,您可以提供自己的值)。随机IV意味着即使使用相同的密钥输出也会有所不同,而随机salt意味着实际的加密密钥也是不同的,因为它是从密码和salt派生的。

您可能(实际上应该)问,当加密密钥和IV都不同时,前十个Base64输出字符为什么是相同的?这是因为对加密结果调用toString()会将其转换为“OpenSSL兼容的字符串”,这基本上是Base64("Salted__" + salt + ciphertext),其中"Salted__"是常量前缀,当然,它在Base64输出中引导相同的前缀。

票数 15
EN

Stack Overflow用户

发布于 2020-01-28 18:57:36

我也面临着同样的问题。这仅仅是因为我们不知道算法的工作原理。简单地说,密钥和IV对于加密方法的每个调用都是不同的,如上面的答案所提到的。

要确保每次迭代的值完全相同,可以参考以下答案https://stackoverflow.com/a/47096284/4098272

或者,您可以使用SHA3函数并比较这两个哈希值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24455810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档