如何在Javascript或Jquery中执行此操作?
请分两步建议:
1.-字阵列到单字节数组。
2.-字节数组到字符串。
也许这会有所帮助:
function hex2a(hex) {
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
答案 0 :(得分:19)
您尝试实现的目标已在CryptoJS中实现。来自documentation:
您可以通过显式调用toString方法并传递编码器将WordArray对象转换为其他格式。
var hash = CryptoJS.SHA256("Message");
alert(hash.toString(CryptoJS.enc.Base64));
alert(hash.toString(CryptoJS.enc.Hex));
老实说,我不知道你为什么要自己实现......但如果你绝对需要这样做,那就是手动&#34;在你提到的两个步骤中,你可以尝试这样的事情:
function wordToByteArray(wordArray) {
var byteArray = [], word, i, j;
for (i = 0; i < wordArray.length; ++i) {
word = wordArray[i];
for (j = 3; j >= 0; --j) {
byteArray.push((word >> 8 * j) & 0xFF);
}
}
return byteArray;
}
function byteArrayToString(byteArray) {
var str = "", i;
for (i = 0; i < byteArray.length; ++i) {
str += escape(String.fromCharCode(byteArray[i]));
}
return str;
}
var hash = CryptoJS.SHA256("Message");
var byteArray = wordToByteArray(hash.words);
alert(byteArrayToString(byteArray));
wordToByteArray
函数应该可以正常工作,但要注意byteArrayToString
几乎在任何情况下都会产生奇怪的结果。我对编码知之甚少,但ASCII只使用7位,因此在尝试编码整个字节时,您不会获得ASCII字符。所以我添加了escape
函数,至少能够显示你可能得到的所有奇怪的字符。 ;)
我建议您使用CryptoJS已经实现的功能,或者只使用字节数组(不将其转换为字符串)进行分析。