如何从CryptoJS AES对象中生成一个字符串?

时间:2015-02-05 11:10:42

标签: javascript json encryption cryptojs

我运行了CryptoJS,我需要执行以下操作:

我有用户名和密码。 U使用密码加密用户名:

var encrypted = CryptoJS.AES.encrypt("user", "pass");

如何从此对象中创建一个String以将其存储在我的LocalStorage

最后,我需要从LocalStorage加载它并将其与:

进行比较
var encrypted2 = CryptoJS.AES.encrypt("user", "pass");

如果encrypted === encrypted2一切正常。

但我无法得到一串encrypted CryptoJS.AES Object,当我使用JSON.stringify时,我收到错误:TypeError: Converting circular structure to JSON

1 个答案:

答案 0 :(得分:4)

encrypted2.toString()将为您提供密文的OpenSSL格式表示。请注意,它不会产生相同的结果,因为您正在使用基于密码的加密,在此期间会生成随机盐以生成加密的实际密钥和IV。使用相同参数生成的每个密文都会以不同的方式显示。

只有密文的解密才能获得密钥+ IV或密码+盐是否正确的信息,然后才能获得包括某种完整性检查的信息(填充是一种不良的完整性检查)。另见:Should we MAC-then-encrypt or encrypt-then-MAC?

如果您只想检查用户名是否相同,则应使用与密码相同的技巧。也就是说,你应该使用散列。 CryptoJS提供多个哈希函数,包括PBKDF2的实现,以提高安全性。当您将密码设置为PBKDF2的盐时,这将为您提供所需的属性。