解密在加密-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
我在想什么?
答
decrypted.toString(CryptoJS.enc.Utf8) // "Message"
见https://code.google.com/p/crypto-js/#The_Hasher_Output
你得到的哈希值不是一个字符串呢。这是一个WordArray对象。当您在字符串上下文中使用WordArray对象时,它会自动转换为十六进制字符串。
您可以通过显式调用的toString方法并传递一个编码器一个WordArray对象转换为其他格式。
仅供参考,输出是明文中每个字符的数字代码点值,以两位数的十六进制数表示。用String.fromCharCode.apply(String,“4d657373616765”.match(/。{2}/g).map(function(d){return parseInt(d,16);}))''观察它。 – apsillers 2014-10-08 14:21:09
图书馆的“文档”当然可以改进。 – Pointy 2014-10-08 14:21:37