URSA快速上手教程:5分钟用Node.js写出第一个RSA加解密程序(附Windows安装避坑清单) URSA快速上手教程5分钟用Node.js写出第一个RSA加解密程序附Windows安装避坑清单【免费下载链接】ursaURSA - RSA public/private key OpenSSL bindings for Node.js项目地址: https://gitcode.com/gh_mirrors/ur/ursaURSA是一个专为 Node.js 打造的RSA 加解密库基于 OpenSSL 原生绑定提供密钥生成、RSA 加密、解密、签名与验签的完整能力。本文带你 5 分钟写出第一个 RSA 加解密程序并附上一份 Windows 安装避坑清单帮你一次装对。一、URSA 是什么Node.js 的 RSA 加解密库URSA 把 OpenSSL 的 RSA 公钥/私钥能力封装成简洁的 JavaScript API特点功能完整密钥对生成、加解密、数字签名/验签、PEM 与 SSH 公钥格式互转⚡性能好C 原生扩展直接调用 OpenSSL传 Buffer 比传字符串更高效API 友好直接传字符串即可默认使用推荐的RSA_PKCS1_OAEP_PADDING填充内置随机性无需上层再加随机数项目结构很精简核心文件一览相对路径文件作用lib/ursa.jsJavaScript API 层所有对外方法都在这里src/ursaNative.ccC 原生绑定对接 OpenSSLbinding.gypnode-gyp 构建配置Windows 上 OpenSSL 路径写死在此test/test.js、test/fixture.js完整测试用例是最好的活文档test/blort.pem、test/blort.pub示例 RSA 密钥对可直接拿来练习二、URSA 安装教程npm 一条命令搞定 已有项目直接安装npm install ursa想要克隆源码研究或二次开发可以这样仓库地址git clone https://gitcode.com/gh_mirrors/ur/ursa ursa cd ursa npm install装完可以跑一遍测试自检npm test # 或 node ./test/test.js全部通过后说明你的 RSA 加解密环境已就绪 ✅三、Windows 安装避坑清单5 个高频报错一次讲清Windows 上安装 ursa 最容易翻车因为它是原生模块需要本地 OpenSSL 参与编译。对照清单逐项检查1. 先装完整版 OpenSSL且位数要和 Node.js 一致选normal 版不要 light 版32 位 Node 配 Win32 版64 位 Node 配 Win64 版2. OpenSSL 必须装到固定目录构建配置binding.gyp中写死了搜索路径OpenSSL 必须安装在C:\OpenSSL-Win64x64 架构C:\OpenSSL-Win32x86 架构装到 D 盘或其他位置会直接编译失败。3. 遇到Error: The specified module could not be found.这是因为运行时找不到libeay32.dll。解法把 OpenSSLbin目录下的libeay32.dll复制到 ursa 模块的bin目录或复制到Windows\System32。4. 需要 node-gyp 编译工具链npm install -g node-gypnode-gyp 依赖Python 2.7和对应版本的Visual Studio缺一不可。如果安装或使用时报错重点检查这两者的版本匹配。5. 位数不匹配 白装Node.js 是 64 位却装了 Win32 版 OpenSSL或反之会出现各种奇怪的链接错误——安装前用node -p process.arch确认一下自己的位数。 避坑口诀位数对齐、目录固定、dll 找得到、工具链齐全。四、5分钟写出第一个 RSA 加解密程序第 1 分钟生成 RSA 密钥对const ursa require(ursa); // 默认生成 2048 位、指数 65537 的私钥安全推荐值 const privateKey ursa.generatePrivateKey(); // 从私钥导出 PEM 格式公钥分别存盘 const fs require(fs); fs.writeFileSync(private.pem, privateKey.toPrivatePem()); fs.writeFileSync(public.pem, privateKey.toPublicPem()); console.log(密钥对生成完毕);第 2~3 分钟公钥加密私钥解密const ursa require(ursa); const fs require(fs); // 从 PEM 文件读取公钥 / 私钥 const pubKey ursa.createPublicKey(fs.readFileSync(public.pem)); const privKey ursa.createPrivateKey(fs.readFileSync(private.pem)); // 公钥加密默认 OAEP 填充输出 base64 const msg pubKey.encrypt(Everything is going to be 200 OK, utf8, base64); console.log(encrypted, msg); // 私钥解密 const plain privKey.decrypt(msg, base64, utf8); console.log(decrypted, plain); // Everything is going to be 200 OK跑完看到明文原样返回恭喜你的第一个 RSA 加解密程序就写好了 参数速查新手最容易看晕的地方encrypt / decrypt的参数模式是(数据, 输入编码, 输出编码)参数说明输入编码字符串传utf8/base64/hex传 Buffer 时编码参数被忽略输出编码不填则返回Buffer推荐更高效填utf8等则返回字符串填充模式默认RSA_PKCS1_OAEP_PADDING可选ursa.RSA_PKCS1_PADDING、ursa.RSA_NO_PADDING进阶一招数字签名与验签URSA 的createSigner/createVerifier和 Node 内置crypto同名 API 几乎一致但只需传哈希算法名如sha256不用写RSA-SHA256这种组合const data Muffins are tasty.; // 签名 const signer ursa.createSigner(sha256); signer.update(data, utf8); const sig signer.sign(privKey, base64); // 验签 const verifier ursa.createVerifier(sha256); verifier.update(data, utf8); console.log(verifier.verify(pubKey, sig, base64)); // true更多细节如 SSH 公钥转换toPublicSsh()、密钥比对equalKeys()等可查README.md官方文档与test/test.js中的用例。五、常见问题速查Q1加密报data too large2048 位密钥在 OAEP 填充下单次加密明文不能超过密钥长度 − 41 字节约 215 字节。超长内容请分块或改用 AES 加密正文 RSA 加密对称密钥的混合方案。Q2解密抛异常而不是返回false填充不匹配加密用 OAEP、解密用 PKCS1会直接抛错。确保两端使用同一填充模式即可。Q3想确认密钥是否有效用ursa.isKey(obj)、ursa.isPrivateKey(obj)、ursa.isPublicKey(obj)判断类型用ursa.matchingPublicKeys(k1, k2)判断公钥部分是否匹配。Q4如何导出 SSH 格式公钥pubKey.toPublicSsh()即得到authorized_keys里那种ssh-rsa AAAA...格式配合toPublicSshFingerprint()还能算出 SSH 指纹。六、写在最后用 URSA一行generatePrivateKey()拿密钥对一次encrypt()decrypt()完成加解密再配createSigner搞定签名——Node.js 里的 RSA 加解密就这么简单。按照第三节的 Windows 避坑清单提前排雷5 分钟足够你把第一个程序跑通。祝编码顺利【免费下载链接】ursaURSA - RSA public/private key OpenSSL bindings for Node.js项目地址: https://gitcode.com/gh_mirrors/ur/ursa创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考