2014-10-08 351 views
4

我放在一起使用的示例性的簡單測試從Crypto-JS source site at Google code解密在加密-JS給出數字的十六進制輸出的,而不是原始的明文串

在頁標頭:

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script> 

在Javascript函數:

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase"); 
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase"); 

alert('encrypted: '+encrypted+' decrypted: '+decrypted); 

但輸出是:

encrypted: U2FsdGVkX19hsNqFBS5xcUoVBCu/hPHepEwZchqnUVU= 
decrypted: 4d657373616765 

image of decrypted output

我在想什麼?

+1

僅供參考,輸出是明文中每個字符的數字代碼點值,以兩位數的十六進制數表示。用String.fromCharCode.apply(String,「4d657373616765」.match(/。{2}/g).map(function(d){return parseInt(d,16);}))''觀察它。 – apsillers 2014-10-08 14:21:09

+2

圖書館的「文檔」當然可以改進。 – Pointy 2014-10-08 14:21:37

回答

5
decrypted.toString(CryptoJS.enc.Utf8) // "Message" 

https://code.google.com/p/crypto-js/#The_Hasher_Output

你得到的哈希值不是一個字符串呢。這是一個WordArray對象。當您在字符串上下文中使用WordArray對象時,它會自動轉換爲十六進制字符串。

您可以通過顯式調用的toString方法並傳遞一個編碼器一個WordArray對象轉換爲其他格式

相關問題