RSA前端生成公私钥对、私钥签名、公钥验签,前端打杂多年,第一次需要搞到这个鬼东西,一开始我内心有一百个拒绝拒绝拒绝 no no no .....
但是没办法,你搞也得搞不搞也得搞,谁叫公司有这么个需求呢? 历经千辛万苦,终于搞出来了,这得多谢下我们公司的后台娃【因为后台验签一直不过,最后查出来前端的锅,没有按照后台需要传入,其实这块我懵逼懵逼懵逼啊】,鼎力配合3,鼎力支持3,鼎力不能再鼎力啦啦啦【重要的事情说三遍!!!】
废话多了点,立马撸起袖子大干一场
不管三七二十一,贴上大名鼎鼎的链接如下:
https://www.npmjs.com/package/node-rsa
首先下载包 【前端用vue 就是这么任性】
npm i node-rsa -D
太慢啦!太慢啦!太慢啦! 那就用淘宝镜像 http://npm.taobao.org/ 自己看哈
cnpm i node-rsa -D
生成公私钥对
const key = new NodeRSA({ b: 2048 }); //生成2048位的密钥
let publicDer = key.exportKey("pkcs1-public-pem"); //公钥
let privateDer = key.exportKey("pkcs1-private-pem");//私钥
//由于我们公司需要提交的公钥不需要有头部尾部换行,简单来说就是只要一个字符串
publicDer = publicDer.replace(/\n/g,'');
publicDer = publicDer.replace('-----BEGIN RSA PUBLIC KEY-----','');
publicDer = publicDer.replace('-----END RSA PUBLIC KEY-----','');
私钥签名
//接接上面的代码哈
先导入私钥
key.importKey(privateDer ,"pkcs1-private-pem");
// hash是一个待签署的哈希值,是个base64的
let signedHash = key.sign(hash,"base64","base64"); //私钥签名后的结果是个base64格式的哦
公钥验签
//继续接接接上上面的代码哈
key.importKey(publicDer,"pkcs1-public-pem");
let vr = key.verify(hash, signedHash, 'base64', "base64");
console.log("验签结果:"+vr); //true
踩坑多时,写个笔记5分钟搞定,分享给下一个需要搞这块的娃娃们参考下
哎呦喂,都下班了,今天周五周五周五,我还在公司加班写文档,立马下班嗨起来