AES-256 CBCはPHPまたはRubyで文字列を暗号化できます(宝石symmetric-encryptionを使用)。AES-256 Ruby/PHPでCBC暗号化に成功しましたが、CryptoJSで復号化に失敗します
<?php
openssl_encrypt(
'Hello!', 'aes-256-cbc', '1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF', 0, '1234567890ABCDEF1234567890ABCDEF'
); // => 'BAd5fmmMTvRE4Ohvf3GpCw=='
ruby_cipher = SymmetricEncryption::Cipher.new(key: "1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF", iv: "1234567890ABCDEF1234567890ABCDEF", cipher_name: 'aes-256-cbc')
ruby_cipher.encrypt("Hello!") # => "BAd5fmmMTvRE4Ohvf3GpCw=="
しかし、私はCryptoJSを使用して、JavaScriptで同じ文字列を復号化するために失敗します。限り、私はドキュメントを解釈することができます:
var encrypted = CryptoJS.AES.encrypt( "Message"、key、{iv:iv});
var decrypted = CryptoJS.AES.decrypt( "Message"、key、{iv:iv});
my jsfiddleか、ここでの私の失敗した試行チェックアウト:
var key = CryptoJS.enc.Hex.parse("1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF");
var iv = CryptoJS.enc.Hex.parse"1234567890ABCDEF1234567890ABCDEF");
var ruby_encrypted = "BAd5fmmMTvRE4Ohvf3GpCw=="; // Output from the Ruby encryption
var js_encrypted = CryptoJS.AES.encrypt("Hello!", key, { iv: iv }); // Test to confirm that CryptoJS can decrypt its own encrypted
var ruby_decrypted = CryptoJS.AES.decrypt(ruby_encrypted, key, { iv: iv }); // Object { words: Array[4], sigBytes: -129 }
var js_decrypted = CryptoJS.AES.decrypt(js_encrypted, key, { iv: iv }); // Object { words: Array[4], sigBytes: 6 }
console.log(ruby_decrypted.toString(CryptoJS.enc.Utf8)); //
console.log(js_decrypted.toString(CryptoJS.enc.Utf8)); // Hello!
復号化が失敗した理由を任意のアイデアを?
Btw、私はOpenSSLがどのように動作するのか少し答えを明確にしました。 –