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 を暗号化すると正しい答えが得られますが、encryptDATA を暗号化しようとすると間違った答えが得られますciphertext。なぜこうなった?

4

2 に答える 2

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 に答える
0

を使用する場合はBase64.stringify、使用する必要がありますBase64.parse

于 2013-03-19T03:39:37.207 に答える