You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android AES解密函数返回null问题求助(附PHP加密代码)

解决AES解密返回null的问题

嘿,我帮你定位到了导致Android端AES解密返回null的核心问题,还顺便发现了PHP代码里的一个小隐患,一起来看看:

核心问题:Android端密钥处理错误

你的PHP加密代码是直接使用原始字符串密钥(比如SeoavcVARXhWKdQ5)进行加密的,但Android的解密代码里却错误地对密钥做了Base64解码操作:

// 错误的代码
SecretKeySpec k = new SecretKeySpec(Base64.decode(key, Base64.DEFAULT), "AES");

这会导致实际使用的密钥和PHP端完全不匹配,进而触发解密失败(通常是BadPaddingException,被catch后返回null)。

正确的做法是直接使用密钥的UTF-8字节,不需要Base64解码:

// 修正后的代码
SecretKeySpec k = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

额外修正:PHP代码的变量错误

你的PHP加密函数里,当密钥长度超过16位时,substr的参数写错了:

// 错误的代码
$key = substr($str, 0, AESCipher::$CIPHER_KEY_LEN);

这里的$str应该是$key,否则会抛出未定义变量的错误,修正后:

$key = substr($key, 0, AESCipher::$CIPHER_KEY_LEN);

修正后的完整Android decrypt函数

import android.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AESCipher {
    private static String CIPHER_NAME = "AES/CBC/PKCS5PADDING";
    private static int CIPHER_KEY_LEN = 16; //128 bits

    public static String decrypt(String key, String initVector, String data) {
        try {
            IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
            Cipher c = Cipher.getInstance(AESCipher.CIPHER_NAME);
            // 修正密钥处理逻辑
            SecretKeySpec k = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
            c.init(Cipher.DECRYPT_MODE, k, iv);
            byte[] decodedEncryptedData = Base64.decode(data, Base64.DEFAULT);
            byte[] original = c.doFinal(decodedEncryptedData);
            return new String(original);
        } catch (Exception e) {
            // 建议打印异常详情,方便后续排查
            e.printStackTrace();
            System.out.println("解密异常:" + e.getMessage());
        }
        return null;
    }
}

验证示例

用你提供的测试数据:

  • 明文:test
  • 密钥:SeoavcVARXhWKdQ5
  • 向量iv:TeoavcVARXhWKdQ5
  • 密文:NnUDIfVXvtamcrYWvs9HWw==

调用修正后的decrypt方法,应该能成功返回test。

内容的提问来源于stack exchange,提问作者AdrianRO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:19:11