public static void main(String[] args) throws Exception {
String base64EncodedKey = "xxxxxxxxxxxxx=";
SecretKey secretKey = new SecretKeySpec(Base64.getDecoder().decode(base64EncodedKey), "AES");
String base64EncryptedData = "xxxxxxxxxxxxxxxx=";
String decryptedData = decrypt(base64EncryptedData, secretKey);
System.out.println("Decrypted Data: " + decryptedData);
private static String decrypt(String base64EncryptedData, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] encryptedData = Base64.getDecoder().decode(base64EncryptedData);
byte[] decryptedBytes = cipher.doFinal(encryptedData);
return new String(decryptedBytes);
想请教下这个用php该怎么解密,我用的是如下代码,不对,java中secretKey做了什么处理呢,我decode是乱码
$decryptedData = openssl_decrypt(base64_decode($base64EncryptedData), 'AES-128-ECB', base64_decode($base64EncodedKey))
@伽蓝幻梦
你帖子中的加密算法是AES-128-ECB, 而你自己正确的示例加密算法AES-256-ECB,你这问题含糊不清导致你后续解密失败。ECB模式是不需要iv的,CBC模式是需要iv的,这两种加密模式自行查阅,所以ECB模式你给了iv也无意义。
$algo = 'AES-256-ECB';
openssl_cipher_key_length($algo);
openssl_cipher_iv_length($algo);
@deatil
AES-256-ECB
,其中AES
是一种加密算法,256
是密钥长度,ECB
是加密模式;常见的加密模式有ECB
,CBC
,CTR
,CFB
,GCM
等等,没有什么规定指定AES默认是CBC加密模式,加密算法需要具体指定。
var_dump(openssl_get_cipher_methods());
@伽蓝幻梦
你帖子中的加密算法是AES-128-ECB, 而你自己正确的示例加密算法AES-256-ECB,你这问题含糊不清导致你后续解密失败。ECB模式是不需要iv的,CBC模式是需要iv的,这两种加密模式自行查阅,所以ECB模式你给了iv也无意义。
$algo = 'AES-256-ECB';
openssl_cipher_key_length($algo);
openssl_cipher_iv_length($algo);
@deatil
AES-256-ECB
,其中AES
是一种加密算法,256
是密钥长度,ECB
是加密模式;常见的加密模式有ECB
,CBC
,CTR
,CFB
,GCM
等等,没有什么规定指定AES默认是CBC加密模式,加密算法需要具体指定。
var_dump(openssl_get_cipher_methods());
$base64EncodedKey = "xxxxxxxxxxxxx=";
$secretKey = base64_decode($base64EncodedKey);
$base64EncryptedData = "xxxxxxxxxxxxxxxx=";
$decryptedData = decrypt($base64EncryptedData, $secretKey);
echo "Decrypted Data: " . $decryptedData;
function decrypt($base64EncryptedData, $secretKey) {
$encryptedData = base64_decode($base64EncryptedData);
$decryptedBytes = openssl_decrypt($encryptedData, 'AES-128-ECB', $secretKey, OPENSSL_RAW_DATA);
return $decryptedBytes;
main();
你发一个明文密文,之前有遇到过类似的问题,最终发现是要在解密前处理一下密文,可以参考一下
$func = function($value) {
$return = '';
foreach(str_split($value, 2) as $pair) {
$return. = chr(hexdec($pair));
return $return;