Hello I'm trying to decrypt a encrypted aes string with crypto-js but it seems like it doesn't work right.
I'm using:
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
</script>
But my results are:
encrypted: U2FsdGVkX19whKq54yOQt3l1erbtEtn/M0qJjAH+E/E=
decrypted: 4d657373616765
My expectation was the it returns back "Message". What am I missing?
The return type of all CryptoJS.<blockcipher>.decrypt()
functions is a WordArray
which is the native representation of binary data in CryptoJS. When you force it to be printed (automatically calling toString()
), the binary data that it contains will be Hex encoded.
If you want to have a different encoding, then you need to specify it. Here are some examples:
console.log(decrypted.toString()); // Hex encoded
console.log(decrypted.toString(CryptoJS.enc.Hex)); // Hex encoded
console.log(CryptoJS.enc.Hex.stringify(decrypted)); // Hex encoded
console.log(decrypted.toString(CryptoJS.enc.Utf8)); // UTF-8 encoded
console.log(CryptoJS.enc.Utf8.stringify(decrypted)); // UTF-8 encoded
console.log(decrypted.toString(CryptoJS.enc.Base64)); // Base64 encoded
console.log(CryptoJS.enc.Base64.stringify(decrypted)); // Base64 encoded