编码加密 · 非对称加密

ECDSA 密钥

椭圆曲线签名密钥对

✓本地处理 · 不上传 ✓免费 · 无需登录 ✓无次数限制 累计 126 次使用
P-256 / P-384 / P-521 椭圆曲线签名 · 浏览器本地生成,不上传
椭圆曲线named curve
签名哈希signature hash
公钥SPKI · X.509 · PEM
—
私钥PKCS#8 · PEM
—
消息message to sign
签名值Base64
就绪 · 选曲线后点「生成密钥对」
第一节

关于本工具

About

服务端签发 JWT 时,ES256 算法要求私钥必须为 P-256 曲线生成的 32 字节密钥——用 OpenSSL 敲错一个参数就得重来。粘贴一段 PEM 格式的私钥或公钥,工具解析出曲线类型、密钥长度与具体坐标值,并验证密钥对是否匹配。所有解析在浏览器本地完成,私钥内容不会离开设备。

使用场景

壹

代码签名证书续期

独立开发者老王去年买的 EV 代码签名证书即将到期,新证书私钥必须重新生成。他需要在旧证书失效前,用新私钥重新签名所有已在商店上架的桌面应用安装包。本工具支持 secp256r1 曲线,生成 256 位私钥和对应 CSR,直接导入 CA 后台完成续期,避免因签名链断裂导致用户更新失败。

贰

SSH 密钥对迁移

运维小赵要把 10 台生产服务器的 SSH 认证从 RSA 2048 切换到 ECDSA。他需要为每台机器生成独立的 secp384r1 密钥对,并确保私钥格式与 OpenSSH 兼容。本工具直接输出 PEM 格式私钥和 RFC 4253 公钥,复制粘贴到 ~/.ssh 即可生效,无需中间格式转换步骤。

叁

JWT 签名密钥初始化

后端工程师小陈在搭建微服务网关时,需要生成一个 ES256(ECDSA using P-256 and SHA-256)签名密钥对,用于签发和验证服务间调用的 JWT Token。他用本工具生成私钥后,直接填入 jwt.io 测试签名,公钥导出为 JWK 格式配置到网关,整个过程不到两分钟。

肆

TLS 客户端证书签发

安全工程师阿杰为公司内网 VPN 配置双向 TLS 认证,需要为 20 名员工签发 ECDSA 客户端证书。他先用本工具为每位员工生成 secp256r1 私钥和证书签名请求(CSR),再批量导入内部 CA 签发。相比 RSA,ECDSA 私钥体积小 70%,在移动端 VPN 客户端上握手速度更快。

伍

区块链钱包地址生成

DApp 开发者小刘要给测试网部署新合约,需要生成一个以太坊风格的 ECDSA 密钥对。他用本工具生成 secp256k1 私钥后,手动提取公钥的 Keccak-256 哈希后 20 字节作为地址。工具输出的十六进制私钥可直接导入 MetaMask 测试网络,省去另找命令行工具的麻烦。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「曲线」下拉框中选择椭圆曲线类型(如 P-256、secp256k1),选定后下方显示该曲线参数摘要
  2. 2点击「生成密钥对」按钮,左侧私钥区与右侧公钥区同时填充十六进制字符串,长度随曲线变化
  3. 3点私钥或公钥旁的「复制」图标,对应密钥文本自动进入剪贴板,按钮短暂显示「已复制」反馈
  4. 4展开「密钥详情」面板,可查看私钥的 PEM 格式、公钥的压缩/未压缩坐标值,支持逐项复制

输入输出示例

输入输出说明
secp256k1私钥(十六进制):E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262 公钥(未压缩):04 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8 公钥(压缩):02 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798常规:比特币标准曲线 secp256k1,验证工具能否正确生成该曲线下的密钥对,并同时输出未压缩和压缩两种公钥格式
P-256私钥(十六进制):C3A4B7D2E8F1A9B6C0D5E4F7A2B8C9D1E3F5A6B7C8D9E0F1A2B3C4D5E6F7A8 公钥(未压缩):04 6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 公钥(压缩):03 6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296常规:NIST P-256 曲线,广泛用于 TLS/SSL 证书和 Web 安全,检查工具是否支持除比特币曲线外的其他标准曲线
Curve25519错误:Curve25519 是 Edwards 曲线(Ed25519),非 Weierstrass 曲线,本工具仅支持 Weierstrass 形式椭圆曲线(如 secp256k1、P-256、P-384)边界:用户混淆曲线类型,工具应明确拒绝并给出原因,避免生成无效密钥
secp256r1私钥(十六进制):A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0C1D2E3F4A5B6C7D8E9F0 公钥(未压缩):04 6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 公钥(压缩):03 6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296易错:secp256r1 是 P-256 的别名,用户常输入此名称,确保工具能识别并正确处理
P-384私钥(十六进制):D1E2F3A4B5C6D7E8F9A0B1C2D3E4F5A6B7C8D9E0F1A2B3C4D5E6F7A8B9C0D1E2F3A4B5C6D7E8F9A0B1C2 公钥(未压缩):04 6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 公钥(压缩):03 6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296边界:P-384 曲线密钥长度更长(384 位),验证工具能否正确处理高位宽曲线,输出格式是否保持一致性
secp256k1私钥(十六进制):0000000000000000000000000000000000000000000000000000000000000001 公钥(未压缩):04 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8 公钥(压缩):02 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798边界:私钥为极小值 1(十六进制),验证工具是否拒绝无效私钥(如 0 或大于曲线阶),以及能否正确处理边界值
secp256k1错误:私钥值必须大于 0 且小于曲线的阶(n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141)易错:用户可能输入 0 或超出范围的私钥,工具应给出明确的错误提示,并告知正确的取值范围

常见错误对照

1.私钥格式与曲线不匹配

✗ 错误用 OpenSSL 生成的 secp256k1 私钥(32字节 hex)直接粘贴到 P-256 曲线生成器中
✓ 修复选择曲线 secp256k1 后,再粘贴该私钥;或确保私钥对应的曲线与工具选择的曲线一致

ECDSA 私钥是曲线特定的,不同曲线的阶(order)不同,同一私钥值在不同曲线上会产生不同的公钥和签名,导致验证失败。

2.公钥未压缩格式缺少前缀字节

✗ 错误公钥 hex 写为 043f...(缺少 04 前缀)
✓ 修复完整未压缩公钥以 04 开头,后跟 x 坐标(32字节)和 y 坐标(32字节),共 65 字节

未压缩公钥的 04 前缀标识编码类型,缺失后工具无法区分是未压缩还是压缩格式,解析会出错。

3.签名 R/S 值顺序颠倒

✗ 错误将 DER 编码签名中的 R 和 S 值互换后输入
✓ 修复按 DER 编码顺序输入:先 R 后 S,或直接粘贴 DER 编码的签名 hex

ECDSA 签名标准(如 RFC 3278)规定 DER 编码顺序为 SEQUENCE { INTEGER r, INTEGER s },颠倒顺序会导致验签失败。

4.签名时消息哈希长度不对

✗ 错误对 SHA-256 摘要(32字节)使用 P-521 曲线签名,但输入了 64 字节的原始消息
✓ 修复先对消息计算 SHA-256 哈希,得到 32 字节摘要,再输入到签名工具中

ECDSA 签名是对消息摘要(哈希值)运算,不是对原始消息。哈希长度需与曲线安全级别匹配,P-521 通常搭配 SHA-512。

5.随机数 k 重用导致私钥泄露

✗ 错误对两个不同消息使用相同的随机数 k 生成签名
✓ 修复每次签名使用独立、不可预测的随机数 k(工具内部自动生成,用户无需手动输入)

若 k 重用,攻击者可通过两个签名直接计算出私钥。这是 ECDSA 实现中最危险的安全漏洞之一,所有标准实现都应保证 k 唯一。

6.公钥点不在曲线上

✗ 错误从网上复制一段公钥 hex,未验证是否满足曲线方程 y² = x³ + ax + b
✓ 修复粘贴公钥后,使用工具内置的「点验证」功能检查该点是否在所选曲线上

无效的公钥点可能导致签名验证永远失败,或更严重地,被攻击者利用构造特殊点绕过验证(如无效曲线攻击)。

7.签名验证时使用了错误的公钥

✗ 错误从不同工具生成的密钥对中复制公钥,直接用于验证另一工具生成的签名
✓ 修复确保签名方和验证方使用同一密钥对中的公钥,且曲线参数一致

ECDSA 验签必须使用签名者对应的公钥,公钥与私钥是数学绑定的,混用不同密钥对会导致验签必然失败。

第三节

工作原理

How It Works

核心公式

Q = d × G

变量说明

  • d私钥,随机大整数
  • G椭圆曲线基点,固定坐标
  • Q公钥,椭圆曲线上的点

示例

以 secp256k1 曲线为例,基点 G 的 x 坐标 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,私钥 d = 0x1,则公钥 Q = 1 × G = G,即公钥 x 坐标与 G 相同。实际私钥为 256 位随机数,如 d = 0x3a2b1c4d5e6f7890abcdef1234567890abcdef1234567890abcdef1234567890,计算 Q = d × G 得到公钥坐标 (x, y),用于签名验证。

选择曲线参数(P-256 / P-384 / P-521)生成随机私钥(256–521 位)椭圆曲线点乘(私钥 × 基点 G)公钥(x,y)私钥(HEX / PEM 输出)公钥(未压缩 / 压缩格式)
用户选择 本地计算 输出结果
第五节

常见问题

Q & A
问生成的私钥和公钥是什么格式的?我能直接复制到代码里用吗?+
答

生成的私钥默认是 PEM 格式(以 -----BEGIN EC PRIVATE KEY----- 开头),公钥也是 PEM 格式。这两段文本可以直接复制到代码文件或配置文件中使用,无需额外转换。工具也支持导出为 DER 二进制格式,适合需要在二进制流中传输的场景。如果代码要求的是十六进制或 Base64 原始字符串,需要自行做一次编码转换。

问我选的曲线(比如 P-256 和 P-384)到底有什么区别?对安全性影响大吗?+
答

主要区别是密钥长度和计算强度。P-256 使用 256 位密钥,安全性相当于 RSA-3072,适合大多数 Web 场景(如 JWT 签名、TLS 证书)。P-384 用 384 位密钥,安全性更高(相当于 RSA-7680),但签名和验证耗时也多约 30%。如果处理的是金融、政务等长期敏感数据,建议选 P-384;普通 API 签名用 P-256 完全够用,而且兼容性更好。

问这个工具是在浏览器里生成的吗?私钥会不会被传到服务器?+
答

不是。本工具采用后端(Go)生成,私钥生成过程在服务端完成,生成完成后会立即返回结果,服务器不会持久化存储任何密钥。不过,为最大限度保障隐私,建议在本地网络环境或内网使用;如果处理极高敏感密钥,推荐使用纯前端生成工具(私钥不出浏览器)。当前工具生成完成后,建议立即复制并关闭页面。

问生成的密钥对怎么验证对不对?有没有办法测一下签名和验签?+
答

本工具不内置签名验签功能。最简单的验证方式:把私钥和公钥分别保存为文件,用 OpenSSL 命令行测试——`openssl pkeyutl -sign -inkey private.pem -in data.txt -out sig.bin` 签名,再用 `openssl pkeyutl -verify -pubin -inkey public.pem -in data.txt -sigfile sig.bin` 验签。如果返回 Verified OK,说明密钥对正确可用。也可以用编程语言(如 Node.js crypto 模块)直接加载 PEM 做签名测试。

问我生成的时候选了不同的曲线,怎么公钥长度不一样?是出问题了吗?+
答

正常现象。公钥长度直接取决于所选椭圆曲线的密钥位数。例如 P-256 生成的公钥(未压缩格式)是 65 字节(1 字节前缀 + 32 字节 x 坐标 + 32 字节 y 坐标),P-384 对应 97 字节,P-521 对应 133 字节。PEM 编码后文本长度也会随之变化,这不是错误。如果发现公钥文本比预期短很多,检查是否误选了 secp256k1(比特币用曲线,公钥也是 65 字节)。

问为什么我生成的私钥开头是 -----BEGIN EC PRIVATE KEY----- 而不是 -----BEGIN PRIVATE KEY-----?这两个有什么区别?+
答

前者是 EC 专用私钥格式(SEC1),只包含椭圆曲线参数和私钥值;后者是 PKCS#8 通用私钥格式,可以封装多种算法(RSA、EC、EdDSA 等),且支持加密。本工具默认输出 SEC1 格式,因为兼容性更广(OpenSSL、Java、Python 原生支持)。如果工具链要求 PKCS#8,可以用 OpenSSL 转换:`openssl pkcs8 -topk8 -nocrypt -in ec_private.pem -out pkcs8_private.pem`。

问我想用这个密钥对做 SSH 登录,可以直接把公钥贴到 authorized_keys 吗?+
答

不行。本工具生成的公钥是 PEM 格式(以 -----BEGIN PUBLIC KEY----- 开头),而 SSH 需要的公钥是 OpenSSH 格式(以 ssh-ecdsa-sha2-nistp256 AAAA... 开头),两者编码方式不同。需要先转换:`ssh-keygen -i -m PKCS8 -f public.pem > id_ecdsa.pub`。或者直接用 `ssh-keygen -t ecdsa -b 256` 生成 SSH 专用密钥对,更省事。如果硬贴 PEM 公钥到 authorized_keys,SSH 服务端会报 invalid format 拒绝连接。

问生成的私钥能设置密码保护吗?我怕文件被别人拿到。+
答

当前工具生成的是未加密的私钥(明文 PEM)。如果需要密码保护,可以在生成后自行用 OpenSSL 加密:`openssl ec -in private.pem -out encrypted.pem -aes256`,会提示输入密码。加密后的私钥开头变成 -----BEGIN EC PRIVATE KEY----- 但中间有 Proc-Type: 4,ENCRYPTED 标记。使用加密私钥时,代码或工具每次签名都需要提供密码。注意:密码丢失无法找回,请妥善保管。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

↑↓选择 ↵打开 ⌘+↵新窗口 esc关闭