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

如何将Node.js crypto的AES加密代码改为CryptoJS适配Golang解密

Vite项目CryptoJS替代原生crypto实现JS加密Golang解密方案

首先安装依赖:

# 安装核心依赖
npm install crypto-js
# TS项目额外安装类型定义
npm install @types/crypto-js -D

修正后的CryptoJS加密解密代码

import CryptoJS from 'crypto-js'

// 加密逻辑和原Node crypto实现完全对齐,输出可直接给Golang端解密
export const encrypt = (plainText: string, secret: string) => {
  // 生成16字节随机IV
  const iv = CryptoJS.lib.WordArray.random(16)
  // 显式将密钥转成WordArray,避免CryptoJS自动做密钥派生,和Golang端密钥处理逻辑对齐
  const secretKey = CryptoJS.enc.Utf8.parse(secret)
  // 加密配置
  const encrypted = CryptoJS.AES.encrypt(plainText, secretKey, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  })
  // IV转Hex + 密文转Hex拼接返回,和原Node crypto输出格式一致
  return iv.toString(CryptoJS.enc.Hex) + encrypted.ciphertext.toString(CryptoJS.enc.Hex)
}

// 对应本地解密方法
export const decrypt = (cipherText: string, secret: string) => {
  // 前32位为16字节IV的Hex格式
  const ivHex = cipherText.slice(0, 32)
  const iv = CryptoJS.enc.Hex.parse(ivHex)
  // 剩余内容为密文Hex
  const ciphertextHex = cipherText.slice(32)
  const ciphertext = CryptoJS.enc.Hex.parse(ciphertextHex)
  const secretKey = CryptoJS.enc.Utf8.parse(secret)
  // 解密,配置项必须传标准iv字段
  const decrypted = CryptoJS.AES.decrypt(
    { ciphertext: ciphertext } as CryptoJS.lib.CipherParams,
    secretKey,
    {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    }
  )
  return decrypted.toString(CryptoJS.enc.Utf8)
}

关键修改说明(对应原代码出错点)

  • 密钥处理:原代码直接传入字符串类型密钥,CryptoJS会默认执行EVP密钥派生,和Golang端直接拿密钥字节做加密的逻辑不匹配,必须显式将密钥转成对应编码的WordArray
  • 编码对齐:原代码encrypted.toString()默认输出Base64格式,和Golang端全Hex解码的逻辑冲突,必须显式将密文转成Hex字符串
  • 参数错误:原解密代码配置项传了自定义的ivEx字段,CryptoJS仅识别标准iv字段,导致IV不匹配解密失败
  • 输出规范:显式指定IV转Hex输出,避免默认toString的格式不符合预期

注意事项

AES-256要求密钥长度为32字节,传入的secret字符串长度必须为32位(Utf8编码下单个字符占1字节的场景),否则Golang端会直接抛出密钥长度不匹配的错误。你提供的Golang端解密代码无需任何修改,可直接解密上述JS代码输出的加密字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:06:08