添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
    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);
    // 使用AES解密数据
    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也无意义。
    // php提供了2个内置函数查询key和iv长度,不清楚可以自查
    $algo = 'AES-256-ECB';
    openssl_cipher_key_length($algo); // php8.2.0引入
    openssl_cipher_iv_length($algo); // php5.3.3引入

    @deatil
    AES-256-ECB,其中AES是一种加密算法,256是密钥长度,ECB是加密模式;常见的加密模式有ECBCBCCTRCFBGCM等等,没有什么规定指定AES默认是CBC加密模式,加密算法需要具体指定。

    // 可以使用php内置函数查询openssl支持的各类加密算法,其中包含AES支持的各类加密模式。
    var_dump(openssl_get_cipher_methods());

    @伽蓝幻梦

  • 你帖子中的加密算法是AES-128-ECB, 而你自己正确的示例加密算法AES-256-ECB,你这问题含糊不清导致你后续解密失败。
  • ECB模式是不需要iv的,CBC模式是需要iv的,这两种加密模式自行查阅,所以ECB模式你给了iv也无意义。
    // php提供了2个内置函数查询key和iv长度,不清楚可以自查
    $algo = 'AES-256-ECB';
    openssl_cipher_key_length($algo); // php8.2.0引入
    openssl_cipher_iv_length($algo); // php5.3.3引入

    @deatil
    AES-256-ECB,其中AES是一种加密算法,256是密钥长度,ECB是加密模式;常见的加密模式有ECBCBCCTRCFBGCM等等,没有什么规定指定AES默认是CBC加密模式,加密算法需要具体指定。

    // 可以使用php内置函数查询openssl支持的各类加密算法,其中包含AES支持的各类加密模式。
    var_dump(openssl_get_cipher_methods());
    // 密钥 $base64EncodedKey = "xxxxxxxxxxxxx="; $secretKey = base64_decode($base64EncodedKey); // 加密后的数据 $base64EncryptedData = "xxxxxxxxxxxxxxxx="; // 解密数据 $decryptedData = decrypt($base64EncryptedData, $secretKey); // 输出结果 echo "Decrypted Data: " . $decryptedData; // 使用AES解密数据 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;
    
  •