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

Java类字节码明文暴露Jasypt加密密码,未转字节码原因问询

Common\00mpCryptoPassword\00Ljava/lang/String;\00
ConstantValue\00   \00KHETD645%3DJD$%(?!%*)5\00<init>\00()V\00Code

面临的安全风险

  • 所有用KHETD645%3DJD$%(?!%*)5这个密钥加密的敏感数据可被直接解密:拿到Class文件的攻击者使用相同的org.jasypt.encryption.pbe.StandardPBEStringEncryptor配置,即可直接解密所有你加密存储的数据库密码、接口密钥、用户敏感字段等数据,无任何破解门槛。
  • 若你使用该密钥做签名校验、身份认证相关场景,攻击者可直接伪造合法的加密数据、签名串,绕过系统校验,甚至篡改业务数据不会被识别。

为什么字符串会明文出现在Class文件中

这是Java虚拟机规范定义的Class文件标准存储格式,不是编译遗漏:
Java的Class文件结构中存在专门的*常量池(Constant Pool)*区域,所有代码里硬编码的字符串字面量(包括你定义的static final类型字符串常量),都会以UTF-8编码的明文形式存储在常量池的CONSTANT_Utf8_info结构里。你在字节码中看到的明文就是常量池的原始存储内容,这一设计的目的是让JVM加载类时可以快速解析、复用常量,降低运行时内存开销。
javac编译器默认只会做源码到字节码的语法转换,不会主动对代码里的敏感常量做加密处理,这不属于标准编译流程的能力范围。

修复建议

  • 禁止在代码中硬编码任何密钥、凭证类敏感信息,正确的做法是将密钥存储在部署环境的环境变量、带权限管控的配置中心、或者专用密钥管理服务(KMS)中,程序启动时动态读取,不会被打包进Class文件。
  • 若确实有硬编码的必要,可使用ProGuard、Allatori等混淆工具对字符串常量做混淆加密,增大逆向提取的难度,但该方案只能提升攻击门槛,不能完全替代安全的密钥存储方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 09:54:05