2012-08-09 240 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已經實現的函數,或者只是使用字節數組(不轉換爲字符串)來進行分析。