我想问一下:
我有请求数据的对象,我想散列值options.data.password:
我是这样做的:
var hashedPassword = CryptoJS.SHA1(options.data.password);
alert(hashedPassword); // This is correctly value
options.data.password = hashedPassword;
问题是,如果我查看更新的JSON对象,我会看到类似这样的内容:
但我预计只是哈希的字符串值,而不是对象。
注意:如果我手动更新值(没有散列函数),则所有内容都正确显示。
我该如何解决?
感谢您的帮助。
答案 0 :(得分:2)
你得到的哈希值还不是一个字符串。它是一个WordArray对象。在字符串上下文中使用WordArray对象时,它会自动转换为十六进制字符串。
您的属性分配和后续JSON.stringify
不知道您想将其用作字符串。
您需要通过调用.toString()
显式地将其设为字符串。再次,来自文档:
您可以通过显式调用toString方法并传递编码器将WordArray对象转换为其他格式。
options.data.password = hashedPassword.toString(CryptoJS.enc.Base64);
仅供参考,此哈希的接收端需要知道使用了什么编码方法(本例中为Base64)才能准确地使用它。
答案 1 :(得分:0)
来自CryptoJS的文档:
你得到的哈希值还不是一个字符串。它是一个WordArray对象。在字符串上下文中使用WordArray对象时,它会自动转换为十六进制字符串。
返回的JavaScript对象有一个toString()方法,这就是为什么当你将它用作字符串时(在alert中),它会被转换为一个。