什么你正在努力实现在CryptoJS已经实现。从documentation:
您可以通过显式调用toString方法并传递编码器来将WordArray对象转换为其他格式。
var hash = CryptoJS.SHA256("Message");
alert(hash.toString(CryptoJS.enc.Base64));
alert(hash.toString(CryptoJS.enc.Hex));
老实说,我不知道为什么你需要实现自己...但是,如果你确实需要做“手动”在你所提到的2个步骤,你可以尝试这样的事情:
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已经实现的函数,或者只是使用字节数组(不转换为字符串)来进行分析。
你是什么意思的字节数组? – 2012-08-09 18:05:32
第一个问题:你为什么需要这个?几乎肯定有更好的方法来实现你想要完成的任何事情。 – Blazemonger 2012-08-09 18:06:10
@Blazemonger想要检查CryptoJS,它会给出一个Word数组中的哈希/密码。 – jacktrades 2012-08-09 18:07:23