使用私钥进行 RSA 解密

用 PEM 私钥通过 RSA-OAEP SHA-256、OAEP SHA-1 或 PKCS#1 v1.5 解密 RSA 密文(Base64 或十六进制)。密钥或填充错误时给出清晰的错误提示。

推荐使用 OAEP 填充。MGF1 使用相同的哈希,与 Web Crypto 和 openssl pkeyutl -pkeyopt rsa_oaep_md 一致。

完全在浏览器中运行,您的数据不会被上传。

什么是 RSA 解密?

用 PEM 格式的私钥(PKCS#8 的 BEGIN PRIVATE KEY 或 PKCS#1 的 BEGIN RSA PRIVATE KEY)解密 RSA 密文。支持带 SHA-256 或 SHA-1 的 RSA-OAEP 以及旧版 PKCS#1 v1.5 填充,与 OpenSSL、Web Crypto、Java 和 Node.js 的输出相匹配。

如何使用 RSA 解密

  1. 粘贴私钥 (PEM)(未加密的),或点击生成测试密钥对(2048 位)进行试验。
  2. 选择加密时使用的填充方式。
  3. 粘贴密文,并选择 Base64 或 Hex 作为其编码。
  4. 点击解密;如果明文是二进制(例如 AES 密钥),请把输出切换为 Hex。

示例

输入
Ciphertext from Node.js `crypto.publicEncrypt` (RSA-OAEP, oaepHash sha256) of "Hello RSA", with the matching 2048-bit PKCS#8 private key
输出
Hello RSA

何时使用 RSA 解密

用于检查你自己的代码生成的密文、解密测试数据,或验证不同平台之间的互操作性。避免把真实的生产私钥粘贴到浏览器中;请使用测试密钥。受口令保护的私钥必须先导出为无口令的形式。

RSA 解密 的工作原理

私钥指数恢复出填充后的消息 m = cᵈ mod n(使用 CRT 优化),然后去除并检查填充:OAEP 会针对所选的 SHA-256 或 SHA-1 验证 MGF1 掩码和标签哈希,PKCS#1 v1.5 则验证 00 02 头部和分隔符。密文必须正好与模数一样长(2048 位密钥为 256 字节);密钥、填充或哈希中的任何不匹配都会导致解密错误,而不是输出错误的结果。

常见用例

  • 验证浏览器端 RSA-OAEP 的输出能否用你的服务器密钥解密
  • 在混合加密测试中解密用 RSA 包裹的 AES 密钥
  • 诊断 Java 与 Node.js 之间 OAEP SHA-1 与 SHA-256 的不匹配问题
  • 解密来自遗留系统的 PKCS#1 v1.5 数据

安全提示

密钥和消息只在你的浏览器中处理。不要把生产环境的私钥粘贴到任何你无法控制的网站——请改为生成测试密钥对。

常见问题

“解密失败”——是哪里出了问题?

通常是填充或 OAEP 哈希不匹配(SHA-1 与 SHA-256)、密文属于另一个密钥对,或在复制过程中损坏。请先尝试另一种 OAEP 哈希。

我的密钥以 BEGIN ENCRYPTED PRIVATE KEY 开头。

不支持受口令保护的密钥。请用 openssl pkey -in key.pem -out plain.pem 转换一份测试副本,并小心处理这份未加密的密钥。

密文长度错误提示说必须是 256 字节。

RSA 密文的长度始终等于模数长度。请检查你是否粘贴了完整的 Base64 字符串,并选择了正确的输入编码(Base64 或 Hex)。

探索更多分类