# 数字签名生成器

用私钥签名消息或用公钥验签——支持 RSA-PSS (SHA-256)、ECDSA (P-256)、Ed25519。纯本地加密（Node crypto.createSign/createVerify），无网络。粘贴 PEM 密钥来签名或验证 base64 签名。本工具只做签名/验签，不生成密钥对。

> 标准页面: https://elysiatools.com/zh/tools/digital-signature-generator

- **分类:** Security

- **关键词:** 数字签名, 签名, 验签, RSA-PSS, ECDSA, Ed25519, 非对称, PKI

## 概述

本工具执行**非对称数字签名**——代码签名、软件溯源（Sigstore/SLSA）、文档签名、认证 API 背后的密码学。

**两种模式：**
- **签名**：粘贴消息和 PEM **私钥**，得到 base64 签名。
- **验签**：粘贴消息、PEM **公钥**和 base64 签名，得到 VALID/INVALID。

**三种算法**（须与你粘贴的密钥类型匹配）：
- **RSA-PSS (SHA-256)**——现代 RSA 签名方案（概率性、加盐），优于旧版 PKCS#1 v1.5。需要 RSA 私钥/公钥。
- **ECDSA (P-256, SHA-256)**——椭圆曲线签名；同等安全强度下密钥比 RSA 短。使用 IEEE P1363（`r‖s`）编码，输出定长确定性。需要 EC P-256（prime256v1）密钥。
- **Ed25519**——快速的确定性 EdDSA（Curve25519）；签名长度固定 64 字节，无需选参数。需要 Ed25519 密钥。

**用法。** 先用 **RSA Key Generator** 或 **SSH Key Generator** 生成密钥对（本工具故意不生成密钥）。然后：
1. 用私钥签名消息 → 复制 base64 签名。
2. 把消息 + 签名 + 你的**公钥**交给接收方。
3. 接收方把三者粘到这里，选匹配的算法，验签。

**密钥/算法匹配。** 算法必须匹配密钥类型：RSA 密钥只能配 RSA-PSS，EC P-256 配 ECDSA，Ed25519 配 Ed25519。不匹配会报验签错误。

**安全。** 所有签名都在浏览器本地通过 Node 的 `crypto` 模块完成——私钥永不离开你的设备。签名不可抵赖：只有私钥持有者才能产生被公钥验证通过的签名。

## 输入项

- **模式** (select)
- **算法** (select)
- **消息** (textarea): The message to sign or verify.
- **私钥 (PEM)** (textarea): -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY----- (Used in Sign mode.)
- **公钥 (PEM)** (textarea): -----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY----- (Used in Verify mode.)
- **签名 (base64)** (textarea): Paste the base64 signature to verify. (Used in Verify mode.)

## 适用场景

- 需要使用私钥对 API 请求、发布包或文本文档进行数字签名以确保防篡改时。
- 收到第三方发送的消息和 Base64 签名，需要使用其公钥验证消息的真实性与完整性时。
- 在开发或调试非对称加密流程中，需要快速验证 RSA-PSS、ECDSA 或 Ed25519 签名逻辑是否正确时。

## 工作原理

- 选择操作模式（签名或验签）并选择与您的密钥类型匹配的算法（RSA-PSS、ECDSA 或 Ed25519）。
- 在“消息”输入框中输入需要处理的原始文本。
- 若为签名模式，粘贴 PEM 格式的私钥以生成 Base64 编码的数字签名；若为验签模式，粘贴 PEM 公钥和待验证的 Base64 签名。
- 浏览器通过本地加密模块即时输出签名结果或验签判定（VALID/INVALID）。

## 使用案例

- 软件发布溯源：开发者使用 Ed25519 私钥对软件版本哈希进行签名，用户下载后用公钥验签以防木马篡改。
- API 接口调用鉴权：在对接需要非对称签名认证的第三方 API 时，本地生成签名用于调试请求参数。
- 电子文档防伪：对合同文本或声明进行数字签名，并将签名与公钥一同分发给接收方进行真实性校验。

## 常见问题

### 这个工具会把我的私钥上传到服务器吗？

不会。所有签名和验签操作均在您的浏览器本地完成，不进行任何网络传输，确保私钥安全。

### 为什么我粘贴了密钥却提示验签失败或报错？

请确保选择的算法与密钥类型匹配。例如，RSA 密钥必须选择 RSA-PSS，EC P-256 密钥必须选择 ECDSA，Ed25519 密钥必须选择 Ed25519。

### 这个工具可以用来生成新的公私钥对吗？

不可以。本工具仅用于签名和验签，如需生成密钥对，请使用专门的 RSA 或 SSH 密钥生成器。

### 为什么生成的签名每次都不一样？

RSA-PSS 是一种概率性签名方案，包含随机盐值，因此每次对相同消息签名输出都不同，但均可用对应公钥成功验签。Ed25519 和 ECDSA 则是确定性的。

### 支持哪些密钥格式？

支持标准的 PEM 格式私钥（通常以 -----BEGIN PRIVATE KEY----- 开头）和公钥（以 -----BEGIN PUBLIC KEY----- 开头）。

## 相关工具

- [PKCE Code Verifier 与 Challenge 生成器](https://elysiatools.com/zh/tools/pkce-code-verifier-generator): 生成、校验与验证 OAuth2 / OIDC PKCE（RFC 7636）的 code_verifier 与 S256 code_challenge 配对。三种模式：(1) 从密码学安全随机字节（256/384/512/768 位熵）生成全新的 verifier + challenge；(2) 按 RFC 审计你已有的 verifier——长度（43–128）、字符集 \[A-Za-z0-9-._~\] 与 ≥256 位熵；(3) 通过重算 BASE64URL(SHA256(verifier)) 验证 verifier/challenge 配对。可选构建完整的授权请求 URL 与令牌交换体。补足通用的 nonce-generator（仅输出 verifier+challenge 配对）——增加 RFC 合规审计与配对验证。
- [Ed25519 / X25519 密钥生成与签名验证器](https://elysiatools.com/zh/tools/ed25519-x25519-keygen-signature-verifier): 生成 Ed25519 或 X25519 密钥，并支持 Ed25519 消息签名与验证
- [Data URI 生成器](https://elysiatools.com/zh/tools/data-uri-generator): 将文件转换为 Data URI（Base64 或百分号编码），用于直接在 HTML、CSS 或 Markdown 中内联图片、字体等资源
- [RSA 加解密](https://elysiatools.com/zh/tools/rsa-encrypt-decrypt): 用 RSA 公钥加密文本，或用匹配的私钥解密密文，使用 OAEP 填充（SHA-1 或 SHA-256）。支持长消息分段。密钥与数据均在本地，不外传。由于 Bleichenbacher 攻击，Node 已禁用 PKCS#1 v1.5 解密，故本工具不提供该选项。
- [安全随机生成器](https://elysiatools.com/zh/tools/secure-random-generator): 生成密码学安全的随机密钥材料，由熵位预算驱动——请求 N 位熵，输出 hex/base64/base64url。也支持通过 crypto.randomInt（内部拒绝采样，无模偏差）从自定义字母表生成字符串。对任何密钥/口令/令牌，请用本工具替代基于 Math.random 的工具。
- [AGEX 安全分享说明页](https://elysiatools.com/zh/tools/agex-secure-share-note): 为 AGEX 包生成面向接收方的分享说明页，解释如何安全解密与验签
- [JWK 生成与解析器](https://elysiatools.com/zh/tools/jwk-generator): 生成 RSA、EC（P-256/P-384/P-521/secp256k1）与 OKP（Ed25519/Ed448/X25519/X448）的 JSON Web Key，或解析已有 JWK 以查看参数、指纹与元信息
- [数字 OTP 生成器](https://elysiatools.com/zh/tools/otp-generator): 生成密码学安全的一次性数字验证码（短信 / 邮件验证、抽奖码、活动 PIN），可配长度（3-10 位）、批量输出、可选排除混淆数字及过期倒计时。使用 crypto.randomInt，而非 Math.random。

## 示例

- [Web Python 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-python): Web Python 图像处理示例，使用 PIL/Pillow 包括读取、保存、缩放和格式转换
- [Android Java 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-java): Android Java 图像处理示例，包括图像读取保存、缩放和格式转换
- [Android Kotlin 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-kotlin): Android Kotlin 图像处理示例，包括图像读取保存、缩放和格式转换
- [Web Rust 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-rust): Web Rust 图像处理示例，包括图像读取保存、缩放和格式转换

## 相关内容

- [音频编码与格式转换工具](https://elysiatools.com/zh/hubs/audio-convert): 在一个专题里比较音频格式转换、码率调整、采样率转换、编码切换和导出工具，适合交付与归档工作流。
- [图片格式转换与动画导出工具](https://elysiatools.com/zh/hubs/image-convert): 在一个专题里比较 JPG、PNG、GIF、AVIF、WebP、TIFF、ICO、base64 以及动画导出相关的图片格式转换工具。
- [JSON 交换与格式翻译工具](https://elysiatools.com/zh/hubs/json-convert): 在一个专题里比较 JSON 与 CSV、YAML、TOML、GraphQL、XML、Markdown、Excel、BSON、EDN 等结构化格式之间的转换工具。
- [面向网页与印刷的色彩空间转换工具](https://elysiatools.com/zh/hubs/design-convert): 围绕网页到印刷的色彩空间转换整理的一组工具。
