Toolit你的日常工具箱

RSA 密钥生成器

安全工具本地处理

在浏览器本地生成 RSA 密钥对,左右并排输出 PEM 格式的公钥与私钥,支持 2048 / 3072 / 4096 位、签名与加密两类密钥类型、PKCS#8 与 PKCS#1 两种私钥格式。

密钥长度
密钥类型 哈希 私钥格式
生成最快,日常签名与大多数 TLS 配置的通用选择。

尚未生成密钥

选择密钥长度后点击「生成密钥对」。密钥会在你的浏览器中即时生成,不会发送到服务器。

什么是 RSA 密钥生成器?

RSA 密钥生成器是一款完全在浏览器本地运行的工具,一键生成可用于数字签名与公钥加密的 RSA 密钥对,输出标准 PEM 格式的公钥与私钥。选择密钥长度与私钥封装格式,点击一次即可拿到可以立即使用的密钥文件。

它适合需要临时生成一把干净密钥的后端开发者——配置 TLS、签发 JWT、生成自签证书;运维工程师——为服务签发证书或轮换密钥;安全学习者——亲手观察密钥对与 PEM 的真实结构。任何需要一份格式正确的密钥、又不想在服务器上敲 openssl 命令的人都能直接使用。

隐私优先设计:密钥通过浏览器的 Web Crypto API 在本地生成。密钥材料不会上传到服务器、不会写入本地存储,也不会出现在任何请求日志中。页面加载后断网仍可使用。

如何生成 RSA 密钥对

1

选择密钥长度

在「密钥长度」里选择 2048、3072 或 4096 位。2048 位是当前通用选择,3072 位适合需要长期使用的服务,4096 位强度最高但生成明显更慢。

2

选择密钥类型

「密钥类型」决定这把密钥用来签名还是加密:RSASSA-PKCS1-v1_5 与 RSA-PSS 用于数字签名(JWT 的 RS256 就基于前者),RSA-OAEP 用于公钥加密。

3

选择哈希与私钥格式

「哈希」决定摘要强度(SHA-256 / 384 / 512),同时用于指纹计算。「私钥格式」决定私钥以哪种 PEM 封装输出:PKCS#8 是通用格式,PKCS#1 是 OpenSSL 传统格式。

4

生成并取用密钥

点击「生成密钥对」。密钥在浏览器的 Web Crypto API 中即时生成,公钥与私钥左右并排显示,可一键复制或下载为 .pem 文件。

功能特点

三种密钥长度

支持 2048、3072、4096 位模数,覆盖从通用到高强度的全部常见规格,并针对每种长度给出适用场景提示。

签名与加密两类密钥

可选 RSASSA-PKCS1-v1_5、RSA-PSS 两种签名算法,或 RSA-OAEP 加密算法,按下游系统的实际要求生成。

三种哈希强度

SHA-256、SHA-384、SHA-512 可选,摘要算法同时用于密钥指纹的计算。

两种私钥格式

PKCS#8 通用格式与 PKCS#1 传统格式可随时切换,同一把密钥输出两种封装,不用再手动转换。

标准 PEM 输出

公钥使用 SPKI 封装(PUBLIC KEY),私钥使用 PRIVATE KEY 或 RSA PRIVATE KEY 标签,每行 64 字符折行,与 OpenSSL 输出的排版完全一致。

公钥指纹

给出公钥 SPKI 派生内容的指纹,可以用来核对公钥是否被篡改,或在配置中做指纹比对。

左右并排布局

公钥与私钥同屏显示,无需上下滚动来回对照,密钥正文不折行、可直接横向阅读。

复制与下载

每个面板都提供复制与下载按钮,下载得到标准的 .pem 文件,可直接交给 OpenSSL、Nginx 或代码库使用。

完全本地生成

全部计算在你的浏览器中完成,密钥不会发送到服务器、不会写入本地存储,也不会出现在任何日志里。

生成耗时可见

状态栏实时显示本次生成用时与实际位数,便于评估高强度密钥在目标设备上的表现。

常见问题

RSA 密钥生成器安全吗?生成的密钥会上传吗?

不会。整个生成过程在你的浏览器里通过 Web Crypto API 完成,密钥材料既不会发送到服务器,也不会写入 localStorage 或任何持久化存储。页面加载完成后断网也能正常使用。

RSA 密钥对是什么?

RSA 密钥对由一把公钥和一把私钥组成。用私钥签名的数据可以用对应的公钥验证,签名者无法伪造;反过来,用公钥加密的数据只有私钥能解开。这个「一对多对一」的特性是数字签名和公钥加密的基础。

PEM 是什么?和 DER 有什么区别?

PEM 是一种文本封装格式,用 -----BEGIN ...----- 和 -----END ...----- 包住 Base64 编码的密钥数据,人眼可读,便于粘贴到配置文件或环境变量里。DER 则是同一份数据的二进制形式,体积更小但不可读。两者内容等价,可以互相转换。

公钥的 PUBLIC KEY 和私钥的 PRIVATE KEY 分别是什么格式?

公钥输出的是 SPKI(SubjectPublicKeyInfo)封装,标签为 PUBLIC KEY,它只包含公钥参数,可以安全分发。私钥的 PKCS#8 封装标签为 PRIVATE KEY,PKCS#1 封装标签为 RSA PRIVATE KEY。两者都是标准格式,可以用 OpenSSL 直接读取。

PKCS#8 和 PKCS#1 该选哪个?

默认用 PKCS#8。它把密钥类型写进了文件本身,因此同一个格式既能装 RSA 也能装 EC,是目前绝大多数库(包括 Node.js、Python cryptography、Java 的 PKCS8EncodedKeySpec)默认接受的格式。只有当对接的工具明确要求传统 RSA 私钥文件时才切到 PKCS#1。

密钥类型该怎么选?

用于数字签名就选 RSASSA-PKCS1-v1_5 或 RSA-PSS,用于公钥加密就选 RSA-OAEP。两者生成的密钥结构相同,但不能互换用途——同一把密钥不能既签名又加密。JWT 的 RS256 / RS384 / RS512 对应 RSASSA-PKCS1-v1_5。

哈希算法会影响密钥本身吗?

不会。哈希只影响签名摘要的强度与指纹的计算方式,同样的长度和类型下,选择 SHA-256 还是 SHA-512 生成的密钥结构完全一致。两者的区别在于安全余量:SHA-512 抗碰撞能力更强,但在绝大多数场景里 SHA-256 已经足够。

应该选多长的密钥?

2048 位是当前通用标准,安全余量充足且性能最好;3072 位适合需要长期使用的服务密钥;4096 位强度更高,但生成和运算都明显更慢,在移动端与高并发场景未必划算。除非有明确的合规或寿命要求,2048 位通常就够用。

为什么生成 4096 位密钥要等好久?

4096 位需要搜索两个各约 2048 位的素数并进行模幂运算,计算量随位数急剧上升,这属于正常的密码学运算成本,而不是工具卡住了。等待几秒是值得的,建议在服务端生成而不是在手机上生成。

生成后应该把私钥放在哪里?

私钥等同于密码本身。不要提交到代码仓库、粘贴到聊天工具或写进日志。常见做法是放进密钥管理服务或 CI 的加密变量,或者保存在服务器上的受限权限文件中,并设置 600 权限。

生成的私钥没有密码保护,可以吗?

本工具输出的是未加密的私钥,这样便于被程序直接读取。保存时应依赖文件权限、密钥管理服务或容器 Secret 来保护。如果需要口令加密的私钥,可用 OpenSSL 加密:openssl pkcs8 -topk8 -in rsa_private.pem -out rsa_enc.pem -v2 aes-256-cbc。

公钥和私钥可以用不同的密钥吗?

不可以。一对密钥必须配套使用:拿 A 的私钥签名,就只能用 A 的公钥来验证。混用会直接导致验签失败。工具生成的公钥与私钥天然配对,并在页面上一同展示。

这把密钥可以用来做 JWT 的 RS256 签名吗?

可以。工具使用的 RSASSA-PKCS1-v1_5 算法正是 RS256 的底层签名算法,与 JWT 常用的 RS256、RS384、RS512 兼容。生成后把私钥以 PKCS#8 格式交给签名库,把公钥交给验签方即可。

页面上的 SHA-256 指纹有什么用?

它是公钥 SPKI 内容的 SHA-256 摘要。公钥是可以公开分发的,但一旦被中间人替换,攻击者就能伪造签名。用指纹做一次核对(例如通过另一个安全渠道比对),就能确认拿到的公钥确实是预期的那把。