到目前为止一直在逃避我的快速(长夜).我在PHP和Java中比较AES256并注意到差异.为简单起见,请忽略ascii键和null 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"
)
);
Java的
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字符串.