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

JS AES192加密后Java解密报错,求正确跨语言AES解密方案

解决JS AES192加密后Java解密的BadPaddingException问题

你遇到的BadPaddingException本质是JavaScript和Java两边的密钥生成逻辑不一致,导致解密用的密钥和加密时的密钥不匹配,咱们一步步来修正:

问题根源分析

你用的Node.js crypto.createCipher('aes192', '你的密钥字符串')并不是直接把传入的字符串当AES密钥用,它藏了个隐式操作:

  • 对传入的密钥字符串做MD5哈希
  • 取哈希结果的前24字节(因为AES192需要24字节长度的密钥)作为实际加密密钥

而你的Java代码直接把密钥字符串转成字节数组当密钥,这和JS生成的密钥完全不一样,自然解密失败。

修正后的Java代码

我们需要在Java中模拟JS的密钥生成逻辑,同时保持加密模式和填充方式和JS一致(JS默认是ECB模式+PKCS5Padding):

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
import java.util.Base64;

public class AESDecrypt {
    public static void main(String[] args) throws Exception {
        String encryptedBase64 = "VABI2hVl2Ydqednr3K5tJv0VFKKiiFK3Jn3kinGxL7U=";
        byte[] encryptedBytes = Base64.getDecoder().decode(encryptedBase64);
        String keyStr = "67f969129e2f78f2ee286d16efec0dad";
        
        byte[] decrypted = decrypt(encryptedBytes, keyStr);
        System.out.println("解密结果:" + new String(decrypted)); // 输出 Hello JavaTpoint
    }

    public static byte[] decrypt(byte[] input, String keyStr) throws Exception {
        // 模拟Node.js createCipher的密钥生成逻辑:MD5哈希密钥字符串,取前24字节
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] md5Hash = md5.digest(keyStr.getBytes("UTF-8"));
        // 取前24字节作为AES192密钥
        byte[] keyBytes = new byte[24];
        System.arraycopy(md5Hash, 0, keyBytes, 0, 24);
        
        SecretKeySpec skey = new SecretKeySpec(keyBytes, "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, skey);
        return cipher.doFinal(input);
    }
}

额外建议

  • 注意:crypto.createCipher是Node.js的旧API,官方推荐用crypto.createCipheriv来指定IV和明确的密钥派生方式,避免这种隐式操作带来的跨语言兼容坑。如果后续有机会,建议把JS代码改成用createCipheriv,对接会更清晰。
  • 另外ECB模式是不安全的,生产环境建议使用CBC或GCM模式,同时配合随机生成的IV。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:23:52