【问题标题】:Word Array to String字数组转字符串
【发布时间】:2012-08-07 00:39:46
【问题描述】:

如何在 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;
}

【问题讨论】:

  • 字节数组是什么意思?
  • 第一个问题:为什么需要这个?几乎可以肯定,有更好的方法来实现您想要完成的任何事情。
  • @Blazemonger 想要检查 CryptoJS,它会在 Word 数组中提供哈希/密码。
  • @Aaron Word Array -> 4 个字节为单个值,Single Byte -> 1 个字节为单个值。

标签: javascript jquery arrays string


【解决方案1】:

您想要实现的目标已经在 CryptoJS 中实现。来自documentation

您可以通过显式调用 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 已经实现的函数,或者只使用字节数组(不将其转换为字符串)进行分析。

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多