尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Node.js数字签名怎么做?URSA Sign/Verify签名验签完全教程(新手友好版)

Node.js数字签名怎么做?URSA Sign/Verify签名验签完全教程(新手友好版) Node.js数字签名怎么做URSA Sign/Verify签名验签完全教程新手友好版【免费下载链接】ursaURSA - RSA public/private key OpenSSL bindings for Node.js项目地址: https://gitcode.com/gh_mirrors/ur/ursaURSA是一个为 Node.js 提供 RSA 公钥/私钥功能的 OpenSSL 绑定库封装了加密、解密以及**数字签名Sign与签名验证Verify**等核心密码学操作。对于新手来说用它给消息签名、再验证签名是否可信只需要几行代码就能完成。本教程用最简单的示例带你从零走完「生成密钥 → 签名 → 验签」的完整流程 一、先搞懂数字签名解决什么问题场景问题URSA 的角色数据防篡改对方能否认改过消息用私钥签名内容变一点签名就失效身份防伪怎么证明确实是我发的用公钥验签只有配对私钥才能签出有效签名一句话记忆私钥签名公钥验签。URSA 把 OpenSSL 的 RSA 能力直接搬进 Node.js支持sha256、sha1、md5等哈希算法还支持 PEM 密钥文件的读写。二、一键安装最快上手步骤在终端执行npm install ursa安装成功后即可在代码中require(ursa)。⚠️ Windows 用户注意URSA 含 C 原生模块见 src/ursaNative.cc需要预装OpenSSL和node-gyp依赖 Python 与 Visual Studio 编译环境详见项目根目录 README.md 的 windows-install 章节。三、第一步生成一对 RSA 密钥不需要手动敲 openssl 命令用generatePrivateKey()直接生成密钥对const ursa require(ursa); // 默认 2048 位模数、65537 指数安全性足够 const privateKey ursa.generatePrivateKey(2048, 65537); const publicKey privateKey.toPublicPem(utf8); // 导出公钥 PEM 文本 const pemPrivate privateKey.toPrivatePem(utf8); // 导出私钥 PEM 文本如果你已经有 PEM 格式的密钥文件例如服务器证书里的.pem文件也可以直接加载const fs require(fs); const privateKey ursa.createPrivateKey(fs.readFileSync(blort.pem)); const publicKey ursa.createPublicKey(fs.readFileSync(blort.pub)); 项目自带的 test/blort.pem、test/blort.pub 就是一对现成的 RSA 测试密钥练手时可以直接拿来用。四、三种签名验签方式由浅入深URSA 在 lib/ursa.js 中提供了三层 API按需求选一种即可。方式 1一步到位 —— hashAndSign / hashAndVerify最推荐新手「哈希 签名」合成一步消息是什么就直接签// 签名输出 hex 编码的签名串 const sig privateKey.hashAndSign(sha256, Hello URSA, utf8, hex); // 验签返回 true / false const ok pubKey.hashAndVerify(sha256, Hello URSA, sig, hex); console.log(ok); // true只需两个参数算法 消息零心智负担适合 API 请求签名、文件完整性校验等大多数场景。方式 2流式处理 —— createSigner / createVerifier数据量大比如大文件时可以分块update不必一次性把数据读进内存// —— 发送方签名 —— const signer ursa.createSigner(sha256); signer.update(Hello ); signer.update(URSA, utf8); // 可多次 update const sig signer.sign(privateKey, hex); // —— 接收方验签 —— const verifier ursa.createVerifier(sha256); verifier.update(Hello URSA, utf8); const ok verifier.verify(pubKey, sig, hex); // true这套update → sign/verify的风格和 Node.js 内置crypto模块完全一致方便迁移。项目测试用例 test/test.js 中就包含 Signer 与 Verifier 的完整验证逻辑可对照参考。方式 3底层操作 —— sign / verify高级如果你已经手动算好了哈希值想跳过哈希步骤可以直接调用privateKey.sign(sha256, hash, hex, hex)对已有哈希签名publicKey.verify(sha256, hash, sig, hex)用已有哈希验签一般业务代码用不到这一层了解即可。五、三种方式怎么选一张表看懂方式API适合场景难度一步式hashAndSign/hashAndVerify短消息、常规签名⭐ 新手首选流式createSigner/createVerifier大文件、分块数据⭐⭐底层sign/verify已有哈希、自定义流程⭐⭐⭐六、新手高频踩坑清单 ️编码要对齐签名和消息都支持utf8、hex、base64、binary。签名时输出用什么编码验签时就要用同一个编码传入混用会导致验签失败。私钥要保密toPrivatePem()导出的私钥不带任何加密落盘请妥善保管URSA 也支持用密码加密的 PEM 私钥createPrivateKey(pem, password)。验签返回 false 还是抛异常false表示签名结构合法但不匹配内容被改过抛异常则是签名本身就无效。业务上两者都应视为验证失败。PSS 填充hashAndSign/hashAndVerify还支持use_pss_padding参数开启 RSASSA-PSS 填充模式与部分网关、云平台对接签名时可能用得上可参考 test/pss_tv.pub 对应的 PSS 验签测试。密钥位数建议 2048 位及以上低于 512 位时generatePrivateKey()会直接报错。七、项目结构与进阶参考想深入源码或跑测试可以看看这几个位置lib/ursa.jsJS 层主入口所有 API 的最终实现src/ursaNative.ccC 原生层调用 OpenSSL 完成 RSA 运算binding.gypnode-gyp 编译配置了解原生模块如何构建test/test.jsMocha 测试用例覆盖 Signer / Verifier / hashAndSign 全流程跑一遍测试验证安装是否成功npm test八、总结✅ 装npm install ursa✅ 生成密钥对generatePrivateKey(2048, 65537)✅ 签名hashAndSign(sha256, msg, utf8, hex)✅ 验签hashAndVerify(sha256, msg, sig, hex)返回true即通过至此你就掌握了 URSA 数字签名与验签的核心用法。从短消息的一步式签名到大文件的流式验签这套 Node.js RSA 工具链都能从容应对。动手写第一个签名试试10 分钟即可跑通 【免费下载链接】ursaURSA - RSA public/private key OpenSSL bindings for Node.js项目地址: https://gitcode.com/gh_mirrors/ur/ursa创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表