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

如何编写与给定Java AES加密逻辑对等的CryptoJS加密代码

Java AES加密逻辑CryptoJS对齐方案

原有代码错误点

  • PBKDF2哈希算法不匹配:Java使用PBKDF2WithHmacSHA256生成密钥,CryptoJS默认PBKDF2采用SHA1哈希,二者生成的密钥完全不一致
  • PBKDF2参数格式错误:CryptoJS.PBKDF2第三参数为配置对象,不能直接传入迭代次数和密钥长度
  • IV转换逻辑错误:全0字节数组不能通过CryptoJS.enc.Utf8.parse转换,该方法会按UTF-8字符规则解析字节,生成的IV和Java端不匹配
  • 密文输出格式错误:Java最终返回Base64编码的密文,原有代码尝试用UTF-8编码输出加密结果,格式完全不兼容

修复后完整代码

const CryptoJS = require('crypto-js');
// 浏览器环境可直接通过script标签引入CryptoJS后使用
const aesEncrypt = () => {
  // 替换为和Java端完全一致的SECRET_KEY、SALT
  const SECRET_KEY = "你的实际密钥";
  const SALT = "你的实际盐值";
  const plainText = `{"company":"1","currency":"GBP","amount":"20","title":"Test"}`;

  // 生成和Java逻辑对齐的256位AES密钥
  const aesKey = CryptoJS.PBKDF2(SECRET_KEY, SALT, {
    keySize: 256 / 32, // CryptoJS密钥长度单位为32位字,256位对应8个32位字
    iterations: 65536,
    hasher: CryptoJS.algo.SHA256 // 明确指定哈希算法为SHA256
  });

  // 构造和Java完全一致的16字节全0IV
  const iv = CryptoJS.enc.Hex.parse('00000000000000000000000000000000');

  // AES加密使用CBC模式+Pkcs7填充(和Java的Pkcs5Padding完全兼容)
  const encryptedResult = CryptoJS.AES.encrypt(plainText, aesKey, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });

  // 直接输出Base64格式密文,和Java返回格式一致
  const encryptedBase64 = encryptedResult.toString();
  console.log(encryptedBase64);
  return encryptedBase64;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:36:04