2012-08-09 244 views
10

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

你是什么意思的字节数组? – 2012-08-09 18:05:32

+1

第一个问题:你为什么需要这个?几乎肯定有更好的方法来实现你想要完成的任何事情。 – Blazemonger 2012-08-09 18:06:10

+0

@Blazemonger想要检查CryptoJS,它会给出一个Word数组中的哈希/密码。 – jacktrades 2012-08-09 18:07:23

回答

18

什么你正在努力实现在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已经实现的函数,或者只是使用字节数组(不转换为字符串)来进行分析。