3
public static void main(String[] args) throws Exception {
String iv = "0102030405060708";
String key = "1882051051AgVfZUKJLInUbWvOPsAP6LM6nBwLn14140722186";
byte[] aaa = AES_cbc_decrypt("hv208Otx0FZL32GUuErHDLlZzC3zVEGRt56f8lviQpk=", key, iv);
System.out.println(new String(aaa));
}
private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
public static byte[] AES_cbc_decrypt(String content,String key,String iv) throws Exception
{
byte[] contentBytes = Base64.decode(content);
byte[] keyBytes = key.substring(0, 16).getBytes();
byte[] ivBytes = iv.getBytes();
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(ivBytes));
byte[] decbbdt = cipher.doFinal(contentBytes);
return decbbdt;
}
與此代碼運行,我得到了如下異常:線程「main」 javax.crypto.BadPaddingException如何解密通過PHP方法加密的Java數據openssl_encryp aes-256-cbc?
例外:由於最後一個塊未正確填充
它可以解密通過php方法
openssl_decrypt(base64_decode($encryptData), 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
爲什麼要將密鑰從50個字節減少到16個? AFAIK在PHP中被稱爲密碼不是密鑰,這意味着它可以是任意長度的,並且密鑰派生函數用於生成真實密鑰。 – Robert
您需要顯示完整的PHP代碼。目前還不清楚密鑰和IV是如何被實際解碼的。 –
切勿使用不帶參數的'String#getBytes',因爲默認字符集可能在不同系統之間發生變化。 –