我正在尝试在WinJS javascript和PHP之间实现AES 128加密。我在winJS中使用Crypto.js进行加密。
这是我的加密代码:
var options = { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 };
/*** encrypt */
var encryptDATA= CryptoJS.AES.encrypt("2.0", "aaaaaaaaaaaaaaaa", options);
var ciphertext = CryptoJS.enc.Base64.stringify(json.ciphertext);
/*** decrypt */
var decrypted = CryptoJS.AES.decrypt(ciphertext, "aaaaaaaaaaaaaaaa", options);
var plaintext = decrypted.toString(CryptoJS.enc.Utf8);
当我加密encryptDATA时,我得到了正确的答案,但是当我尝试加密ciphertext
时,我得到了错误的答案。为什么会这样?
答案 0 :(得分:0)
如果您使用Base64.stringify
,则需要使用Base64.parse
。
答案 1 :(得分:0)
我的猜测是,传递给json.ciphertext
函数的Base64.stringify()
值不是CryptoJS.lib.WordArray
的实例,它需要使Base64编码正常运行。
我在这里设置了一个jsfiddle:http://jsfiddle.net/9Hyfd/来演示使用该功能加密字符串并粘贴下面的相关代码:
/*** encrypt base64 encoded */
var words = CryptoJS.enc.Utf8.parse("2.0");
var ciphertext = CryptoJS.enc.Base64.stringify(words);
var encryptDATA = CryptoJS.AES.encrypt(ciphertext, "aaaaaaaaaaaaaaaa", options);
/*** decrypt base64 encoded */
var decrypted = CryptoJS.AES.decrypt(encryptDATA, "aaaaaaaaaaaaaaaa", options);
var plaintext = CryptoJS.enc.Utf8.stringify(decrypted);
plaintext = CryptoJS.enc.Base64.parse(plaintext).toString(CryptoJS.enc.Utf8);
请注意,这可能不是解决问题的最有效方法,但它可以从您当前尝试的方式正确解密数据。