js用SHA1withRSA加签

前言:

最近开发项目中无意用到SHA1withRSA签名算法,纵观百度了下,资料比较少,通过源码例子查询使用方法,对此有些了解,所有多此总结下。

SHA1WithRSA:用SHA算法进行签名,用RSA算法进行加密。

具体的对于SHA和RSA算法这里不做详细介绍,只简单的介绍如何使用SHA1withRSA都数据进去签名算法。

主要是利用了jsrsasign这个库,很强大。

第一步:首先生成秘钥对(可以自动生成,或者后台提供)

作为前端我们就不需要明白怎么生成秘钥,不会的百度搜索。这里提供一个网址web.chacuo.net/netrsakeypa…

这里我们已经拿到了公私钥,例如:

注意公私钥都必须带有头部尾部。

公钥:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCU4aJUKL4FKuMQ6WMt3slH8uoh
w4Agrd5sBA6iXKZFyAosdMfwn/CB64xwVnZSUeHYzTKlAkGYACOY9JWp/K3eHTXV
80oY98FwZmcVpM5y5YTfTvW/zT4kZ9eF1EFrfixX2t2vLKuXH/2Pd78+284kl2SB
batPq/N/du/1Ruq0PwIDAQAB
-----END PUBLIC KEY-----
复制代码

私钥:

-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJTholQovgUq4xDp
Yy3eyUfy6iHDgCCt3mwEDqJcpkXICix0x/Cf8IHrjHBWdlJR4djNMqUCQZgAI5j0
lan8rd4dNdXzShj3wXBmZxWkznLlhN9O9b/NPiRn14XUQWt+LFfa3a8sq5cf/Y93
vz7bziSXZIFtq0+r83927/VG6rQ/AgMBAAECgYBWpKlPyRYs87SJlwl9HHaPRLM1
Sw0593XF7uaFXt31JmGlVaE2TB4vveFRT0A00Cpbfa/Hj/SUfSA6V7zx3HdiNOoS
O23s4ean0fraK4vGuyXL/LtAWAE37X59ciLnZCmGxpEr6PmvbIyxRHG0zZFwfr4G
Tr2BlpYpBJ7iMxM1wQJBAMNdbe+E8Rx3sT3VZcdQ3JGOlBdylCrVb09mu5dmcwxu
dCNxUjwt175GRMmW/6Ql384CqYE19r50INFaI/TJFdcCQQDDFuNtT3MxzAD8kslo
qO6jx2wW18ogNdtc9+zlFd2hBAZZshlEVAW8iyQCyll65cqf/egN8I1/ElBfIrMM
qjfZAkBepXbLITbGOd5uPGIQi8Yv5kksit/pWHmSmAytrn5yOVieixnx+auZjOVq
XHMBDTA91+BSrtgZMJ1tjyP4RSsFAkBSw3QKXKlXF9/XRwKRFxHeg2zUqAlE7vQ4
Fan3afZTJ9z10nurpCWm3jSRxnx9id0TUOlQeJveq8tTAOqK1e/JAkEApLGftZP7
6EVr0sz2z4FnuAtp7YmbDxA7nKLKNYjolLyrw5gM+mGIcYAyxfPUz+ddTNtdfuh0
sjFkxWcUVBWYnQ==
-----END PRIVATE KEY-----复制代码

第二步:利用私钥对数据进行加签

import Jsrsasign,{KJUR,hex2b64} from 'jsrsasign';

// 用自己的私钥对url进行签名
export function signature(url){
  // 私钥加签
  let privateKey = '-----BEGIN PRIVATE KEY-----MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKpHfFmxCZuMHDoeNod+TTSeE4Y6TusQ8UB4kquw0kQDQfNTpuEP0Y2o0Oc6TPI7F4zJsy266bWp3zznvOlLXwObFcz1aAGXHHOybgu4ma+nwYvX5/9R2HRaExTPABe9GjhpMPLWWoJAsCLHm3J0tzMVI7rq1bcMD3c4lI3omdXhAgMBAAECgYEAibVAWqTzWSlplpLilJdPRvNkZNR5CF/uS653J4Tbt4dO6cNIHZGWblMNh0K+AdRKSmDAmIYmBfW4hWAAhkefMU+eHP4fzPZ1D/FC7EMceRCYmfQZST30QBEj93Qb8qhlP9bn/KZ3UGdrEHTERGOEaV5cmJT15iJx7jbyz/YNRsECQQDhm4j6ii+b7PuLCGz49Ajv3WxMH/TlZFWaWjsIHjrA1moSiCN4zeLZOfEhpQzKz8liMDrotbBoo+lIxYxdFHGJAkEAwTfbwUTBB/h3k9pE7suA/XcnUHPA/ZJNpHc2LSDwyr9FlonNjUzBQnTAFrQAeWQ0LsGjoyJTGN5UME4GBypjmQJAOHTDgm6yG0Lib5hcLLBkzCGMyD/2+LBy+3046H8oFLmTMa//sGtVKSbmwJSc7uOwcXHATBurWYQrDJri1SgYgQJBAIAXfukuomWdU/DB18cTRI1ES9zrEDtKnYx1t4XNe7R9fy2gZ5PQGaLr8VhbtqDDTFDe8JO6sqoe4mMvppFjiakCQC099wyiYfj8edUGmKRlWI4lGkckj0pKpwiIeVJ0fzAvhHzGTvySIj0fngqKy6bs4GnDNJQoQ4UnPRi7srC0voA=-----END PRIVATE KEY-----';
  let sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa","prvkeypem": privateKey}); 
  sign = hex2b64(sign); 
  return sign;
};复制代码

利用es6语法,应该比较容易理解。

url就是你需要加签的数据,hex2b64就是把结果转成base64格式。

结果得到sign。

第三步:利用公钥对签文进行验证

import Jsrsasign,{KJUR,hex2b64} from 'jsrsasign';
// 用公钥对签名进行验签

export function verify(url,data) {
  try {
    let publicKey = '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCEO23dYaK65jtxrtBHoT8nVlfw3kGw6fAJBJ5GuFL01QQ1yI42Fl+3fxHJauZiMoXBbB+WdeBh4iypp9U9cXLuf5UldNOFKY667sy4HLSYyB6GcLrSpEutRSTbMC2wwu2YOQt73cUob9li2usF/+p8EuJ++unySr5V151lqCJrxwIDAQAB-----END PUBLIC KEY-----';
    let sig = new KJUR.crypto.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa","prvkeypem": publicKey});
    sig.updateString(url);
    let result = sig.verify(data);
    return result;
  } catch(e) {
    console.error(e);
  }
};复制代码

url:加签的数据,

data:加签之后得到的签文。

主要是verify方法进行验证。

总结:如果有疑问或者报错的话可以查看github上的资源,里面有例子。github地址:github.com/kjur/jsrsas…

有问题欢迎指正。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值