0

我正在尝试在 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。为什么会这样?

4

2 回答 2

0

如果使用Base64.stringify,则需要使用Base64.parse

于 2013-03-19T03:39:37.207 回答
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);

请注意,这可能不是解决问题的最有效方法,但它确实以您当前尝试的方式正确解密数据。

于 2013-03-19T17:21:41.190 回答