DevTools

Druid RSA 加密 / 解密

浏览器本地处理

为 Alibaba Druid 数据源生成密码密文,或使用公钥还原已有配置。支持多个历史版本、默认密钥与自定义密钥。

查看加密原理与版本差异 ↓

该版本的命令行工具默认生成 512 位密钥对;本页建议新配置使用 2048 位。 算法兼容性相同,切换版本不会转换已有密文。

主下载来自 Maven Central,镜像可作为备用。文件为当前版本的 Druid 核心 JAR,可用于下方 ConfigTools 命令。

生成会替换下方密钥;密钥不会自动保存。

支持 PKCS#8 / PKCS#1;加密时自动补全对应公钥。

支持 X.509 / SPKI、PKCS#1;配置文件使用 Base64 格式。

0 个 UTF-8 字节

密码、密钥与结果只保留在当前页面内存中,不会发送到工具服务端,也不会写入本地存储。刷新或离开页面后需重新输入。

Druid RSA 加解密原理

ConfigTools 将数据库密码编码为 UTF-8,按 RSA PKCS#1 v1.5 的 type 1 规则填充,再使用私钥执行 RSA 运算,最后输出 Base64。数据源启动时,ConfigFilter 使用配置中的公钥解密,将还原的密码交给数据库驱动。

明文密码 UTF-8 字节
私钥加密 → Base64 密文 保存为 password
公钥解密 → 明文密码 config.decrypt.key

为什么普通 RSA 工具可能不兼容?

常见 RSA 加密使用公钥加密、私钥解密;Druid 使用相反的密钥方向,并且不进行消息哈希。使用 RSA-OAEP、标准带哈希的签名,或拼接多段 RSA 密文,均不能直接替代 ConfigTools 的输出。相同私钥和相同密码在这些版本中会得到相同密文。

密文能保护到什么程度?

这种方式主要用于避免配置文件直接出现明文。持有配套公钥的人可以还原密码,公钥与密文放在一起并不能防止配置泄露后的解密。私钥无需放到运行配置中;生产环境仍应控制配置访问权限,并结合密钥管理服务管理凭据。

为什么有密码长度限制?

单个 RSA 块最多容纳「密钥字节数 − 11」个明文字节:512 位为 53 字节,1024 位为 117 字节,2048 位为 245 字节。中文通常占 3 个 UTF-8 字节,表情可能占 4 个;本页按字节检查,超长时请使用更长的密钥。

解密失败时检查什么?

确认密文完整,公钥来自同一次密钥生成,并已启用 ConfigFilter 和 config.decrypt=true。只有使用内置默认私钥加密的内容才能用默认公钥解密。历史版本解密使用 JVM 默认字符集;含中文密码时,应确认原项目运行在 UTF-8 字符集下。

多版本兼容说明

以下为已核对的具体版本。版本选择用于展示对应行为,密文没有版本标记;这些版本使用相同的密钥对时可以互相解密。所列版本是兼容目标,不代表依赖升级建议。

版本ConfigTools.main 行为源码中的 Cipher官方源码JAR 下载
1.0.15使用内置默认密钥,仅输出密文RSA(SunJCE 下为 PKCS1Padding)ConfigTools ↗下载 ↗镜像 ↗
1.0.16新建 512 位密钥对,输出私钥、公钥与密文RSA(SunJCE 下为 PKCS1Padding)ConfigTools ↗下载 ↗镜像 ↗
1.1.24新建 512 位密钥对,输出私钥、公钥与密文RSA/ECB/PKCS1PaddingConfigTools ↗下载 ↗镜像 ↗
1.2.23新建 512 位密钥对,输出私钥、公钥与密文RSA/ECB/PKCS1PaddingConfigTools ↗下载 ↗镜像 ↗
1.2.27新建 512 位密钥对,输出私钥、公钥与密文RSA/ECB/PKCS1PaddingConfigTools ↗下载 ↗镜像 ↗

1.0.15 / 1.0.16 的简写 RSA 按常见 Oracle / OpenJDK SunJCE 提供者解释为 RSA/ECB/PKCS1Padding;其他 JCE 提供者需核对默认填充。后续所列版本显式声明该填充。各版本的 encrypt(String) / decrypt(String) API 仍可使用内置默认密钥。

在项目中用同版本 JAR 核对

java -cp druid-1.2.27.jar com.alibaba.druid.filter.config.ConfigTools "示例密码"

1.0.16 及以上所列版本每次运行命令都会生成新的密钥对,不能拿不同运行生成的公钥解密。项目采用重打包、修改版或其他版本时,以实际 JAR 的 ConfigTools 实现为准。