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

JSR223预处理器加密后生成乱码,如何生成网站可识别的AES登录密钥?

问题解决:AES加密后生成乱码导致Base64解码报错

问题根源

你遇到的乱码和StringIndexOutOfBoundsException本质是同一个问题:

  • AES加密输出的是二进制字节数组,直接用new String(encrypted)转字符串会因为二进制字节无法映射为合法字符集(如UTF-8)出现乱码。
  • 服务器端的decodeBase64方法期望接收标准Base64编码字符串,乱码字符串不符合Base64格式,解码时就会抛出索引越界异常。

修复步骤

1. 对加密后的字节数组做Base64编码

在Groovy代码中,加密完成后不要直接转字符串,而是将二进制字节数组编码为标准Base64字符串。Groovy可直接使用JDK自带的Base64工具类(注意要和网站原生encrypt.js的Base64编码规则一致,比如是否使用URL安全变体):

// 假设encrypted是AES加密后的byte[]
def base64Encrypted = Base64.getEncoder().encodeToString(encrypted)

2. 修正参数传递代码

将Base64编码后的字符串存入变量,替换原来的直接转字符串逻辑:

vars.put("a3", base64Encrypted);

3. 额外验证点

确保你的Groovy AES实现和网站原生encrypt.js的以下参数完全一致,否则即使Base64编码正确,服务器也会认证失败:

  • AES密钥(长度、编码方式,比如是否从字符串转成UTF-8字节)
  • 加密模式(比如ECB/CBC,CBC需要IV向量的话要和前端一致)
  • 填充方式(比如PKCS5Padding/PKCS7Padding)
  • Base64编码类型(是否使用URL安全的Base64,即替换+为-、/为_,是否省略末尾的=)

示例修正后代码片段

// 假设已完成AES加密得到byte[] encrypted
def base64Encrypted = Base64.getEncoder().encodeToString(encrypted)
vars.put("a3", base64Encrypted)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:26:26