これまで私を避けてきた素早いもの(長い夜)。PHP と Java で AES256 を比較していて、相違点に気付きました。簡単にするために、ASCII キーとヌル IV は無視してください。これらは本番環境で置き換えられます。しかし、私は最初にこれを乗り越える必要があり、どこが間違っているのかわかりません:
PHP:
echo base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
"1234567890ABCDEF1234567890ABCDEF",
"This is a test",
MCRYPT_MODE_CBC,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
)
);
ジャワ
byte[] key = "1234567890ABCDEF1234567890ABCDEF".getBytes("UTF-8");
byte[] iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
SecretKeySpec newKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec);
byte[] results = cipher.doFinal("This is a test".getBytes("UTF-8"));
return Base64.encodeToString(results,Base64.DEFAULT);
PHP 出力: 0KwK+eubMErzDaPU1+mwTQ==
Java 出力:DEKGJDo3JPtk48tPgCVN3Q==
私が期待していたものとはまったく違います o_O !
MCRYPT_MODE_CBC
、MCRYPT_MODE_CFB
、MCRYPT_MODE_ECB
、なども試しましたMCRYPT_MODE_NOFB
。どれも Java 文字列を生成しませんでした。