ecdsa离线签名验签可在浏览器中纯前端完成:先用web crypto api生成p-256密钥对,再用私钥签名任意可转arraybuffer的数据,最后用公钥验证完整性;全程离线,签名结果可导出为base64供存档,私钥须用户自主安全保管。

直接用 Web Crypto API 实现 ECDSA 离线电子签名与防篡改校验,核心在于三步:生成密钥对、用私钥签名、用公钥验证。整个过程不依赖网络或后端,所有操作在浏览器中完成,签名结果可导出为字节数组或 base64 字符串,供后续离线存档或传输使用。
生成 P-256 椭圆曲线密钥对
ECDSA 在前端推荐使用 P-256 曲线(即 nistP256),它兼顾安全性与性能,256 位密钥强度等效于 3072 位 RSA,适合资源受限的客户端环境。
- 调用
window.crypto.subtle.generateKey,指定算法为"ECDSA"、曲线为"P-256"、哈希为"SHA-256" -
extractable设为true才能导出私钥用于离线保存(注意:私钥导出后需由用户自行安全保管,不可上传) - 权限数组必须包含
["sign", "verify"],否则后续无法签名或验签
对任意文本或结构化数据进行签名
签名对象不限于字符串——只要能转为 ArrayBuffer,比如 JSON 对象、表单字段、PDF 元数据,甚至二进制文件切片,都可签名。
引导 OpenClaw 代理使用 exec 和 process 工具执行 Ralph Wiggum 循环。通过 pty:true 提供正确的 TTY 支持,编排编码代理(Codex, Claude Code, OpenCode, Goose)。利用 PROMPT.md、AGENTS.md、SPECS 和 IMPLEMENTATION_PLAN.md 规划和构建代码。包含规划与构建模式、背压机制、沙箱及完成条件。用户请求循环,代理使用工具执行。
- 先用
new TextEncoder().encode("原始内容")编码文本;若处理对象,建议先JSON.stringify()再编码 - 调用
subtle.sign,传入私钥和待签名数据,返回ArrayBuffer格式的签名 - 为便于离线存储或展示,常用
base64url编码签名结果:arrayBufferToBase64Url(signature)
离线验证签名是否被篡改
验签只需公钥和原始数据,无需联网、无需私钥,完全满足“防篡改校验”需求:哪怕数据被改一个字符,验证必然失败。
- 公钥通常以
spki格式导出(subtle.exportKey("spki", publicKey)),这是标准、可跨平台导入的格式 - 验证时先用
subtle.importKey导入公钥,再调用subtle.verify,传入算法参数、公钥、签名(需还原为ArrayBuffer)和原始数据 - 返回布尔值:
true表示数据未被篡改且确由对应私钥签署;false即表示篡改或伪造
关键注意事项
ECDSA 离线签名不是“点一下就完事”,几个细节决定是否真正可靠:
- 私钥绝不能出现在代码中或硬编码,必须由用户本地生成并自主保管;若需持久化,可用
IndexedDB加密存储,但不推荐明文保存 - 签名前务必确认原始数据是最终版本——例如表单提交前做一次完整序列化,避免因 DOM 变动导致前后数据不一致
- 公钥分发需可信渠道,比如嵌入 PDF 元数据、打印在纸质凭证旁、或通过带数字签名的证书链传递
- 不要用
Math.random()做随机盐值,所有密钥生成和签名流程都应依赖window.crypto提供的真随机源
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










