jsrsasign的签名实现

参考jsrsa签名实现

参考基于jsrsasign框架的vue在rsa的签名过程

参考:https://www.jianshu.com/p/78821648d6ff

应用库: http://kjur.github.io/jsrsasign/  

github: https://github.com/machinewu/jsrsasign


这个是由前端用私钥签名,后端用公钥验证的过程。

前端生成随机的32位随机数,然后用私钥加密,然后转成base64格式,这些方法都在jsrsasign中有对应方法,官网中有说明。

这个前端的加密签名过程用了我一天的时间,崩溃到怀疑人生啊!!

主要参考是第二个,虽然是vue的,但是讲解比较清楚。

为什么一个加密过程花费了我一天的时间!总结了下

1. 还是对加密解密的一些概念不懂,leader给了一个私钥“MIIBUgIBADANBgkqhkiG9w0BAQEFAASCATwwggE4AgEAAkEAgDR9FwK5Je5TNE8KP2X5j7VUP1ioWs2mSNk+mWWbYTQ3AXfLPPdRhHFCVfBfmFopc3azL+9l9YMqaYfV+uyEZQIDAQABAkB76T9VtC4a+SO2FQbEi90PBqUsrJXbXZRwKHiWblwlL5n5DaFmqBTGU1ZsZxW17vQss254Om4Ct97DHCAYVjhBAiEA4LGn6nyXW1AcVRkBibZV3EYKOqoNsQb9tR3EE4clW0kCIQCSEUhhB3fEzpK1/8c2Lk1ty03zzL4bmULfJfj7YTOkPQIgSYR3P3bCgyMEEifbY/afwzG7eRRY5Ho4GsGBfS4z39kCIAnIOIWu/1lh0Dd6ErhRL4RL2kOakZy9jdnt7BfBsbitAh89IAnbzwvHMSeSCv3eXzh+NgQHQeUJD7EVcm7BD0pl”,我直接就去库中找api,可是忽略了蜜月需要带有‘—–BEGIN PRIVATE KEY—–’以及相应的尾标识。

2. 然后开始不知道PCK#8和PCK#1,虽然现在也不知道。。。不过仔细看官网的api说明还是可以摸索到正确答案的。

3. 就是一直验证不通过我开始用

sig.updateHex(uuid);其实应该用

sig.updateString( uuid );

4. 最后获取签名的时候用sig.sign()而不是sig.hSgin或者别的其他

5. 给后端传签名的时候,加号没有了,然后就用了encodeURICompoent来转码,后端解码,done!


注意:

密钥对需要带有‘—–BEGIN PRIVATE KEY—–’以及相应的尾标识密钥
对格式为PCK#8时使用KEYUTIL.getKey(yourPEMKey)进行解析,而PCK#1则使用rsa.readPrivateKeyFromPEMString
sig.sign()生成的是一串16进制字符串(hexadecimal),通过需要转换为base64位使用,通过jsrsasign的全局方法hextob64()进行转换。文档见jsrsasign的global相关方法
最后根据情况 需要使用encodeURICompoent(sign)将加密后的密文进行转码,因为一些+号传到后端可能不识别。



猜你喜欢

转载自blog.csdn.net/yangxiaoyanger/article/details/80404522