RN签名、验签

RN签名、验签

本文解决了RN的RSA签名、验签问题。

用到的第三方库:jsrsasign

// 安装jsrsasign库
npm install jsrsasign

签名API:Signature

官网示例代码如下:
// RSA signature generation
var sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA"});
sig.init(prvKeyPEM);
sig.updateString('aaa');
var hSigVal = sig.sign();

// DSA signature validation
var sig2 = new KJUR.crypto.Signature({"alg": "SHA1withDSA"});
sig2.init(certPEM);
sig.updateString('aaa');
var isValid = sig2.verify(hSigVal);

// ECDSA signing
var sig = new KJUR.crypto.Signature({'alg':'SHA1withECDSA'});
sig.init(prvKeyPEM);
sig.updateString('aaa');
var sigValueHex = sig.sign();

// ECDSA verifying
var sig2 = new KJUR.crypto.Signature({'alg':'SHA1withECDSA'});
sig.init(certPEM);
sig.updateString('aaa');
var isValid = sig.verify(sigValueHex);
实际使用代码如下:
/* -------------------------- 签名 ------------------------ */

// 导入密钥文件
import * as key from "./key";

// 导入jsrsasign库
var r = require('jsrsasign');

// 将密钥转码
var k = r.b64tohex(key.pri);

// 创建RSAKey对象
var rsa = new r.RSAKey();

// 传入密钥
rsa.readPKCS8PrvKeyHex(k);

// 创建Signature对象,设置签名编码算法
var sig = new r.KJUR.crypto.Signature({"alg": "SHA256withRSA"});

// 添加RSAKey
sig.init(rsa);

// 添加原文
sig.updateString('Message');

// 签名
var hSigVal = sig.sign();

// 对已签名的密文进行转码
var s = r.hex2b64(hSigVal);

// 控制台打印
console.log(s);
// 对话框打印
alert(s);


/* -------------------------- 验签 ------------------------ */

// 已签名和转码的密文
var m = "***密钥***";

// 将密钥转码
var k = r.b64tohex(key.pubYS);

// 创建RSAKey对象
var rsa = new r.RSAKey();

// 传入密钥
rsa.readPKCS8PubKeyHex(k);

// 创建Signature对象,设置签名编码算法
var sig = new r.KJUR.crypto.Signature({"alg": "SHA256withRSA"});

// 添加RSAKey
sig.init(rsa);

// 添加原文
sig.updateString("Message");

// 验证签名
var isValid = sig.verify(r.b64tohex(m));

// 控制台打印
console.log(isValid);

// 对话框打印
alert(isValid);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值