什么时候使用
适合只有接收方 RSA 公钥、需要加密超过 RSA 单次长度限制的文本。它把 RSA 用于保护随机会话密钥,把较长正文交给 AES-GCM。
快速使用
- 加密时粘贴接收方公钥,或先生成一组 RSA 密钥。
- 输入正文并点击“生成混合加密信封”,得到 Hybrid v1 JSON。
- 接收方使用配套私钥解密整个 JSON;私钥不要和信封一起传递或保存。
工具说明
这个工具把 RSA 和 AES 组合成一个浏览器本地数字信封:
- 每次加密生成新的 32 字节随机 AES-256 会话密钥。
- 使用 AES-256-GCM 加密 UTF-8 正文。
- 使用接收方的 RSA 公钥和 OAEP/SHA-256 包装会话密钥。
- 把包装后的会话密钥、IV、密文和认证标签保存为 Hybrid v1 JSON。
解密时,接收方先使用 RSA 私钥解封 AES 会话密钥,再通过 AES-256-GCM 校验信封并还原正文。RSA 只处理固定长度的随机密钥,所以正文不再受 RSA 单次明文长度限制;实际可处理长度仍取决于当前浏览器的内存。
页面算法固定为 RSA-OAEP + SHA-256 和 AES-256-GCM,不提供 PKCS#1 v1.5、AES-CBC 或无认证模式。密钥、明文、会话密钥和信封只在当前浏览器中处理,不会上传或保存。
密钥格式
公钥加密支持:
- SPKI PEM:
BEGIN PUBLIC KEY - PKCS#1 PEM:
BEGIN RSA PUBLIC KEY - X.509 PEM 证书:
BEGIN CERTIFICATE - RSA 公钥 JWK
私钥解密支持:
- PKCS#8 PEM:
BEGIN PRIVATE KEY - PKCS#1 PEM:
BEGIN RSA PRIVATE KEY - 包含完整私密参数的 RSA 私钥 JWK
页面可以生成 2048、3072 或 4096 位 RSA 密钥对,默认使用 2048 位。生成结果是 SPKI 公钥和未加密 PKCS#8 私钥。
Hybrid v1 信封
{
"v": 1,
"alg": "RSA-OAEP-256",
"enc": "A256GCM",
"encryptedKey": "<Base64 RSA ciphertext>",
"iv": "<12-byte Base64>",
"ciphertext": "<Base64>",
"authTag": "<16-byte Base64>"
}
encryptedKey是 RSA-OAEP/SHA-256 包装后的 32 字节会话密钥。iv是每次加密重新生成的 12 字节随机 GCM IV。ciphertext不包含认证标签。authTag固定为 16 字节。v、alg和enc的规范 JSON 会作为 AES-GCM AAD 参与认证。
Hybrid v1 是本站工具自己的 JSON 契约,不是 JWE Compact Serialization 或 JWE JSON Serialization。它不会读取 AES v1、v2、v3、v4 信封,也没有其他旧版混合信封兼容逻辑。
安全边界
- 同一 RSA 公钥可以加密多条消息,但每条消息都会使用新的 AES 密钥和 IV。
- RSA-OAEP 只负责会话密钥机密性;AES-GCM 同时保护正文机密性和信封完整性。
- 修改
v、alg、enc、encryptedKey、iv、ciphertext或authTag后,解密都会失败。 - 工具不会保存私钥。请勿在不可信设备、共享设备或已被注入脚本的页面中粘贴生产私钥。
- 这是加密工具,不包含发送方签名或身份认证;仅凭成功解密无法证明消息由谁发送。
常见问题
为什么不直接用 RSA 加密长文本?
RSA 每次只能处理远小于模数长度的数据,而且不适合直接加密大块内容。混合加密只让 RSA 包装固定的 32 字节会话密钥,把正文交给高效的 AES-GCM。
为什么没有算法下拉框?
这个页面用于提供单一、明确的现代组合。RSA 固定为 OAEP/SHA-256,正文固定为 AES-256-GCM,避免生成缺少认证或仅用于旧系统兼容的信封。
这个 JSON 能直接当作 JWE 使用吗?
不能。字段含义与数字信封相似,但编码、AAD 和序列化契约由本工具定义。需要标准 JWE 时,应使用专门的 JOSE 实现。
能证明发送方身份吗?
不能。任何拿到接收方公钥的人都可以生成可解密信封。如果还需要确认发送方身份,应在明确协议中增加数字签名。
密钥和正文会上传吗?
不会。密钥生成、随机数生成、RSA 包装、AES-GCM 加解密和复制都在当前浏览器中完成。