使用方法
- 选择“算法”:加密请选 RSA-OAEP,签名请选其中一种签名算法。
- 选择“密钥长度”。2048位是通常的最低要求;4096位生成所需的时间更长。
- 按“生成密钥对”,然后复制或下载四个框中的内容。
- 将私钥保存在机密管理工具中,切勿将它粘贴到网站、聊天或他人可以读取的文件中。
密钥对包含什么
RSA 密钥对有一个公开部分(任何人都可以拥有)和一个私有部分(只有所有者保管)。私钥以 PKCS#8(RFC 5958)格式写出,公钥以 SubjectPublicKeyInfo(RFC 5280)格式写出。两者都包装在 PEM 中,即位于 BEGIN 和 END 行之间的 Base64 文本(RFC 7468)。JWK 格式(RFC 7517)则以 JSON 保存相同的数字。
modulus n = p x q(两个约为密钥长度一半的质数)
public exponent e = 65537 (0x010001)
private exponent d,满足 d x e = 1 modulo (p - 1) x (q - 1)
算法与密钥长度
RSA-OAEP 用于加密,RSA-PSS 和 RSASSA-PKCS1-v1_5用于签名。这里三者都使用 SHA-256。密钥长度即模数 n 的位数:2048位是目前通常的最低要求,3072和4096位适用于需要长期有效的密钥。密钥越长,使用速度越慢,但4096位密钥对的公钥仍然很小。
浏览器使用其自带的密码学库生成密钥对(Web Cryptography API 中的 crypto.subtle.generateKey)。页面不自行编写 RSA 代码。
密钥在哪些情况下安全,哪些情况下不安全
密钥不会离开此页面:它们不会被发送、保存或记录。风险来自页面本身:在此页面中运行的任何程序,以及浏览器中的任何扩展程序,都可能在密钥显示期间读取它;复制到剪贴板的内容或下载的文件,则会一直留在磁盘上,直到被删除。
对于用于保护资金、身份或生产系统的密钥,请在私钥无法被复制出来的环境中生成,例如硬件安全模块、密钥保管库,或您控制的服务器。
计算示例:2048位 RSA-OAEP 密钥对
选择 RSA-OAEP 和2048位,然后按“生成密钥对”,会得到一个 PKCS#8私钥,其 PEM 以 -----BEGIN PRIVATE KEY----- 开头;以及一个 SPKI 公钥,其 PEM 以 -----BEGIN PUBLIC KEY----- 开头。公钥的 JWK 中,kty 为 RSA,e 为 AQAB,即65537的 Base64url 编码。其 n 值长256字节,因为2048位正好是256字节。
常见问题
在此页面生成用于真实网站的密钥安全吗?
用于学习和测试,可以。用于保护资金、身份或正在运行的系统,则不可以:浏览器及其扩展程序在密钥显示期间都可能读取它。这类密钥应在私钥无法被复制出来的环境中生成。
为什么私钥采用 PKCS#8格式,而不是较旧的 RSA PRIVATE KEY 格式?
PKCS#8(RFC 5958)会在密钥内部注明算法,因此读取者能知道该密钥的用途。大多数库都支持它。如果您的库需要旧格式,可以用 openssl 等工具转换。
公开指数为什么是65537?
它是2的16次方加1,是一个只有两个位为1的小数。它让公钥运算很快,也是主流库所使用的值,因此页面对每个密钥都采用它。
应该选择2048、3072还是4096位?
2048位是目前通常的最低要求。若密钥需要在很多年里保持安全,请选择3072或4096位,但要接受更长的密钥会让签名或解密变慢。
为什么私钥比公钥长得多?
公钥只包含模数和公开指数。私钥还包含两个质数,以及用于加快解密的数值(RFC 8017,附录 A.1.2),因此私钥要长好几倍。
关闭页面后,页面会保留我的密钥吗?
不会。密钥只存在于打开的页面的内存中,页面不会在浏览器中保存任何内容,即使是本地存储也不会。关闭前请先复制或下载密钥。
资料来源
- RFC 8017:PKCS #1 RSA 密码学规范,第2.2版(英文)
- RFC 5958:Asymmetric Key Packages(PKCS#8,英文)
- RFC 7468:Textual Encodings of PKIX, PKCS, and CMS Structures(英文)
- RFC 7517:JSON Web Key (JWK)(英文)
- W3C:Web Cryptography API(英文)
数据和文字最近核对于2026年11月10日星期二。