当前位置: 首页 > news >正文

使用jsrsasign进行RSA加密解密

1. 生成密钥对

const { prvKeyObj, pubKeyObj } = jsrsasign.KEYUTIL.generateKeypair("RSA", 2048);

generateKeypair返回的是公钥对象和私钥对象

如果有公钥或私钥对象,获取公钥或私钥字符串内容

const publicKey = jsrsasign.KEYUTIL.getPEM(pubKeyObj);
const privateKey = jsrsasign.KEYUTIL.getPEM(prvKeyObj, "PKCS8PRV");

如果有公钥字符串或者私钥字符串,获取公钥或私钥对象

const publicKey = `
-----BEGIN PUBLIC KEY-----
公钥……
-----END PUBLIC KEY-----
`;const privateKey = `
-----BEGIN PRIVATE KEY-----
私钥……
-----END PRIVATE KEY-----
`;
const pubKeyObj = jsrsasign.KEYUTIL.getKey(publicKey);
const prvKeyObj = jsrsasign.KEYUTIL.getKey(privateKey);

2.使用公钥加密

password:加密内容

pubKeyObj:公钥对象

RSAOAEP:算法名称

const encrypted = jsrsasign.KJUR.crypto.Cipher.encrypt(password,pubKeyObj,"RSAOAEP"
);

3.使用私钥解密

encrypted:已加密的内容

prvKeyObj:私钥对象

RSAOAEP:算法名称

const decrypted = jsrsasign.KJUR.crypto.Cipher.decrypt(encrypted,prvKeyObj,"RSAOAEP"
);

4.jsrsasign移除了RSAOAEP算法

jsrsasign版本10支持RSAOAEP算法

jsrsasign在版本11后移除了对RSA and RSAOAEP的支持

https://kjur.github.io/jsrsasign/api/symbols/KJUR.crypto.Cipher.html#.encrypt

RSAOAEP算法使用pubKeyObj.encryptOAEP、prvKeyObj.decryptOAEP方法替代

const encrypted = pubKeyObj.encryptOAEP(password, "sha1");
const decrypted = prvKeyObj.decryptOAEP(encrypted, "sha1");

5.完整代码

const jsrsasign = require("jsrsasign");const { prvKeyObj, pubKeyObj } = jsrsasign.KEYUTIL.generateKeypair("RSA", 2048);const publicKey = jsrsasign.KEYUTIL.getPEM(pubKeyObj);
const privateKey = jsrsasign.KEYUTIL.getPEM(prvKeyObj, "PKCS8PRV");console.log("publicKey -> ", publicKey);
console.log("privateKey -> ", privateKey);const password = "123456";const encrypted = jsrsasign.KJUR.crypto.Cipher.encrypt(password,pubKeyObj,"RSAOAEP"
);console.log("encrypted -> ", encrypted);const decrypted = jsrsasign.KJUR.crypto.Cipher.decrypt(encrypted,prvKeyObj,"RSAOAEP"
);console.log("decrypted -> ", decrypted);

http://www.xdnf.cn/news/129997.html

相关文章:

  • Vue 2 和 Vue 3 的详细对比,从 生命周期、API、响应式系统、函数调用 等多角度展开,最后附表格总结
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第三模块·面向对象深度进化 —— 第十二章 接口:比C函数指针更强大的契约
  • 数学基础 -- 欧拉公式的推导过程学习
  • 精准落地设计,现代项目管理中的深度实践
  • FeignClient用法笔记
  • 构建企业官方网站有哪些必备因素?
  • YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】
  • ecovadis认证需要提供哪些文件?ecovadis认证优势是什么?
  • c语言 write函数
  • Java线程池那点事(面试高频)
  • ASR VAD TTS
  • VLA 论文精读(十八)π0.5: a Vision-Language-Action Model with Open-World Generalization
  • JavaFX 第三篇 HostServices和Platform
  • 交通运输行业综合智慧监管平台:商贸物流的安全与效率引擎
  • Windows下QT打包后程序运行后弹出CMD命令窗口的问题解决方法
  • vxe-table封装表头
  • MSHFlexGrid 控件网格赋值指南方案
  • Python爬虫实战:移动端逆向工具Fiddler经典案例
  • 24FIC 决赛 计算机部分
  • 【HFP】蓝牙语音通话控制深度解析:来电拒接与通话终止协议
  • 【前端】【业务场景】【面试】在前端开发中,如何优化 SVG(可缩放矢量图形)的性能,特别是在处理复杂图形和动画时
  • MCP实战-本地MCP Server+Cursor实践
  • AI日报 - 2025年04月25日
  • C语言-函数-1
  • 入门-C编程基础部分:19、输入 输出
  • 位带和位带别名区
  • python自动化学习六:断言
  • 【Linux系统篇】:什么是信号以及信号是如何产生的---从基础到应用的全面解析
  • redis相关问题整理
  • 2024年ASOC SCI1区TOP:改进灰狼算法IGWO+股票指数收益预测,深度解析+性能实测