開発したいコードの予備テストとして、CryptoJS を使用してデータをエンコード/デコードしようとしています。これは、暗号化に使用しているコードです。
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
var message = "Secret Message";
var key = CryptoJS.enc.Hex.parse('36ebe205bcdfc499a25e6923f4450fa8');
var iv = CryptoJS.enc.Hex.parse('be410fea41df7162a679875ec131cf2c');
// Encription. Works ok
var encrypted = CryptoJS.AES.encrypt(
message,key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
console.log('encrypted:'+encrypted.ciphertext.toString());
<script>
これは、復号化に使用する最初のテストです。正常に動作し、戻ります3f0e590d2617dc7007b89350bd590409
// Decription. Works ok with "encrypted" parameter
var decrypted = CryptoJS.AES.decrypt(
encrypted,key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
console.log('decrypted:'+decrypted.toString(CryptoJS.enc.Utf8));
encrypted
parameter が への前回の呼び出しの結果であることに注意してくださいCryptoJS.AES.encrypt
。それはオブジェクトです。
私が抱えている問題は、文字列を直接復号化しようとするときです:
// Decription. It fails with manual data
var manual_data = CryptoJS.enc.Hex.parse('3f0e590d2617dc7007b89350bd590409');
var decrypted = CryptoJS.AES.decrypt(
manual_data,key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
console.log('decrypted, by hand:'+decrypted.toString(CryptoJS.enc.Utf8));
「空の」オブジェクト (上記の例では空の文字列) を返します。最初の例の暗号化されたオブジェクトに格納されているが、2 番目の例の wordarray から欠落している、CryptoJS.AES.decrypt が必要とするいくつかのデータがあるようです。
なぜこれが起こっているのか誰にも分かりますか?