解密在加密-JS给出数字的十六进制输出的,而不是原始的明文串

问题描述:

我放在一起使用的示例性的简单测试从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

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

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

你得到的哈希值不是一个字符串呢。这是一个WordArray对象。当您在字符串上下文中使用WordArray对象时,它会自动转换为十六进制字符串。

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