如果在JSON对象中替换SHA1哈希密码转换为对象

时间:2014-08-15 13:01:17

标签: json sha1 hashcode

我想问一下:

我有请求数据的对象,我想散列值options.data.password:

我是这样做的:

var hashedPassword = CryptoJS.SHA1(options.data.password);
alert(hashedPassword); // This is correctly value 
options.data.password = hashedPassword;

问题是,如果我查看更新的JSON对象,我会看到类似这样的内容:

enter image description here

但我预计只是哈希的字符串值,而不是对象。

注意:如果我手动更新值(没有散列函数),则所有内容都正确显示。

我该如何解决?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

根据CryptoJS documentation

  

你得到的哈希值还不是一个字符串。它是一个WordArray对象。在字符串上下文中使用WordArray对象时,它会自动转换为十六进制字符串。

您的属性分配和后续JSON.stringify不知道您想将其用作字符串。

您需要通过调用.toString()显式地将其设为字符串。再次,来自文档:

  

您可以通过显式调用toString方法并传递编码器将WordArray对象转换为其他格式。

options.data.password = hashedPassword.toString(CryptoJS.enc.Base64);

仅供参考,此哈希的接收端需要知道使用了什么编码方法(本例中为Base64)才能准确地使用它。

答案 1 :(得分:0)

来自CryptoJS的文档:

你得到的哈希值还不是一个字符串。它是一个WordArray对象。在字符串上下文中使用WordArray对象时,它会自动转换为十六进制字符串。

返回的JavaScript对象有一个toString()方法,这就是为什么当你将它用作字符串时(在alert中),它会被转换为一个。