AES / RSA 加解密
本地处理选择 AES 或 RSA,完成加解密、密钥生成与签名验签。
使用指南
工具介绍
对称加密与非对称加密放在同一页:AES 侧支持 GCM / CBC / CTR 三种模式与 PBKDF2 口令派生,适合加密一段文本;RSA 侧支持密钥对生成、OAEP 加解密与 PSS 签名验签,用于与既有系统对接。
全部运算调用浏览器内置的 WebCrypto 完成,口令与私钥都留在本机内存里。输出的 PEM 与密文格式与 OpenSSL 及多数语言的标准库互通,方便和其他系统对接。
使用步骤
- AES:选择模式(推荐 GCM),设置密钥长度与 PBKDF2 迭代轮数,输入口令与明文后加密;解密时填回同样的参数与密文。
- RSA:先生成一对密钥(2048 位足够常用,4096 位更慢),或直接粘贴已有的 PEM 私钥 / 公钥。
- 加密或解密时选择填充方式与摘要算法(OAEP / PKCS#1 v1.5);签名验签时选择 PSS 或 PKCS#1 v1.5。
- 复制结果或导出 PEM,交给对接方时确认双方的参数完全一致。
适用场景
- 给配置文件里的一段敏感值做加密,避免明文入库。
- 与 Java / Go 服务对接前,先在这里用同样的参数验证一遍加解密结果能不能对上。
- 临时生成一对 RSA 密钥,用于本地联调签名验签流程。
- 验证对方发来的密文能否用约定的口令与模式解开,快速定位参数不一致的问题。
常见问题
- 页面提示当前环境不支持 WebCrypto?
- WebCrypto(crypto.subtle)只在 https 或 localhost 下可用。通过 http 的 IP 地址直接访问时浏览器会隐藏该接口,换用 https 访问即可恢复正常。
- 解密时报「处理失败」,参数要怎么对齐?
- AES 解密必须与加密时使用完全相同的组合:模式、密钥长度、PBKDF2 迭代轮数、口令,缺一不可。密文本身已带上 salt 与 iv,但参数不在其中,需要双方约定或另行传递。
- 导入 OpenSSL 生成的私钥失败?
- 目前私钥仅支持 PKCS#8 格式(以 -----BEGIN PRIVATE KEY----- 开头)。OpenSSL 老式 genrsa 命令输出的 PKCS#1 格式(以 -----BEGIN RSA PRIVATE KEY----- 开头)暂不支持,可先用 openssl pkcs8 -topk8 转换后再粘贴。
- 生成 RSA 4096 位密钥要等很久?
- 4096 位密钥的生成确实需要几秒,这是正常耗时而非卡死。日常使用 2048 位已足够;只在有明确合规要求时才选 4096 位。
- 密文能在别的语言或工具里解开吗?
- 可以,前提是参数一致。AES 密文是 base64(salt | iv | ciphertext),GCM 模式还带有认证标签,CBC 由浏览器按 PKCS#7 自动填充;RSA 的 PEM 格式与 OpenSSL、Java、Go 等标准库互通。
- OAEP / PSS 和 PKCS#1 v1.5 该选哪个?
- 新系统优先 OAEP(加密)与 PSS(签名),它们有更严格的安全证明。PKCS#1 v1.5 是为兼容旧系统保留的选项(浏览器原生不支持,由本页 JS 实现),只在对方系统确实不支持时才使用。
安全说明
- 所有加密运算在浏览器本地完成,口令 / 私钥不会上传任何服务器
- AES 支持 GCM / CBC / CTR 模式,密钥长度与 PBKDF2 迭代轮数可选,解密需与加密参数一致
- RSA 默认 2048 位;4096 位生成较慢(约几秒),用于更高安全等级
格式说明
- AES 密文输出格式:base64(salt(16B) | iv(GCM 12B / CBC、CTR 16B) | ciphertext[+GCM tag]),CBC 由浏览器自动 PKCS#7 填充
- RSA 加密填充可选 OAEP / PKCS#1 v1.5,签名可选 PSS / PKCS#1 v1.5(即 RS256 一类),摘要算法可选,双方需一致
- PEM 格式与 OpenSSL / 多数语言标准库互操作;私钥目前仅支持 PKCS#8 格式(-----BEGIN PRIVATE KEY-----),OpenSSL 老式 genrsa 输出(BEGIN RSA PRIVATE KEY)暂不支持
使用建议
- PKCS#1 v1.5 加密为兼容旧系统保留(浏览器原生不支持,由本页 JS 实现),新系统请优先 OAEP / PSS
- 生产环境口令建议 ≥ 12 位并混合大小写数字符号
- 私钥务必妥善保管,丢失无法恢复,泄露需立即作废