前言:
最近开发项目中无意用到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…。
有问题欢迎指正。
今天的文章js用SHA1withRSA加签分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/19312.html