单词数组转换成字符串

15

如何用Javascript或Jquery实现此操作?

请提供以下2个步骤:

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;
}

什么是字节数组? - Aaron Kurtzhals
1
第一个问题:你为什么需要这个?几乎肯定有更好的方法来实现你想要完成的任务。 - Blazemonger
@Blazemonger 想要检查CryptoJS,它可以给出Word Array中的哈希/密码。 - jacktrades
@Aaron 词组数组 -> 将4字节转换为单个值,单字节 -> 将1字节转换为单个值。 - jacktrades
1个回答

28

你想要实现的功能已经在 CryptoJS 中实现了。根据文档:

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

var hash = CryptoJS.SHA256("Message");
alert(hash.toString(CryptoJS.enc.Base64));
alert(hash.toString(CryptoJS.enc.Hex));


说实话,我不知道为什么你想要自己实现这个... 但是如果你非常需要使用你提到的两个步骤来“手动”进行,你可以尝试像这样:

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已经实现的函数或者只使用字节数组(而不将其转换为字符串)进行分析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接