文档章节

JS RSA 签名实现

hejunbinlan
 hejunbinlan
发布于 2017/07/19 13:22
字数 620
阅读 75
收藏 0

首先去下载jsrsasign的库,这个库是纯js的,不依赖于openssl,所以可以在浏览器直接使用,当然后端的nodejs也是可以用的。比较通用。

http://kjur.github.io/jsrsasign/

https://github.com/kjur/jsrsasign

这个库依赖一个crypto-js库,他的例子里面很多是从googlecode里面直接使用,不过,由于我们都知道的原因,这个是无法访问的。

幸好有人把它从googlecode移动了一份到github

https://github.com/evanvosberg/crypto-js

都下载以后,把库放到站点的目录上。

下面讲讲使用。

首先引用想要的库

[javascript] view plain copy

<script src="http://yui.yahooapis.com/2.9.0/build/yahoo/yahoo-min.js"></script>  

    <script src="crypto-js/components/core.js"></script>  

    <script src="crypto-js/components/sha1.js"></script>  

    <script src="crypto-js/components/md5.js"></script>  

    <script src="crypto-js/components/sha256.js"></script>  

  

    <script language="JavaScript" type="text/javascript" src="ext/jsbn.js"></script>  

    <script language="JavaScript" type="text/javascript" src="ext/jsbn2.js"></script>  

    <script language="JavaScript" type="text/javascript" src="ext/prng4.js"></script>  

    <script language="JavaScript" type="text/javascript" src="ext/rng.js"></script>  

    <script language="JavaScript" type="text/javascript" src="ext/rsa.js"></script>  

    <script language="JavaScript" type="text/javascript" src="ext/rsa2.js"></script>  

    <script language="JavaScript" type="text/javascript" src="ext/base64.js"></script>  

  

    <script language="JavaScript" type="text/javascript" src="jsrsasign/rsapem-1.1.js"></script>  

    <script language="JavaScript" type="text/javascript" src="jsrsasign/rsasign-1.2.js"></script>  

    <script language="JavaScript" type="text/javascript" src="jsrsasign/asn1hex-1.1.js"></script>  

    <script language="JavaScript" type="text/javascript" src="jsrsasign/crypto-1.1.js"></script>  

    <script language="JavaScript" type="text/javascript" src="jsrsasign/pkcs5pkey-1.0.js"></script>  

    <script language="JavaScript" type="text/javascript" src="jsrsasign/base64x-1.1.js"></script>  

    <script language="JavaScript" type="text/javascript" src="jsrsasign/keyutil-1.0.js"></script>  

 

 

这是我一次性引入的,主要是参考了jsrsasign里面的test页面,估计有点多。。。。

我本来想使用requirejs的,不过,不大会用。。。
 

然后要根据配置读取key,配置sign方式。

 

[javascript] view plain copy

var prvKey = KEYUTIL.getRSAKeyFromPlainPKCS8PEM(pem); // KEYUTIL提供了PKCS#8的pem读取,这是一般用openssl生成的默认。而jsrsasign的默认是PKCS#1 所以需要用keyutil  

var sig = new KJUR.crypto.Signature({"alg": "MD5withRSA", "prov": "cryptojs/jsrsa"}); // alg为MD5WithRSA,这个还有个常见的是SHA1WithRSA,不过貌似支付宝是用的MD5,所以我们公司用的也是MD5,也许java默认的就是这个格式。    

sig.initSign(prvKey);  // 设置key  

sig.signString(signString);  // 签名    

var sign = hex2b64(s4.hSign);  // 得到签名Hex,并转成base64string  

对了,还需要注意的是,pem的头,不是

BEGIN RSA PRIVATE KEY

而是

BEGIN PRIVATE KEY

其实后者是我用openssl里面生成就是这样的,我不知道为啥会是上面的那种头,没仔细研究。


大功告成。

哦了,简明攻略在此。jsrsa的资料真的好少,希望给后来者一点参考。

本文转载自:http://blog.csdn.net/rarexray/article/details/39025635

hejunbinlan
粉丝 42
博文 596
码字总数 21569
作品 0
浦东
高级程序员
私信 提问
[IOS黑魔法] - 使用jspatch热更新(介绍篇)

JSPatch是什么 JSPatch是一个开源项目,只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C 原生方法。目前主要用于下发 JS...

HeroHY
2017/03/14
0
0
RSA加密过的表单密码用python怎么模拟?

比如这个页面: http://ec.iot.10086.cn 可以看到页面中的JS有这样一段 很显然这个密码是用RSA算法加密之后再提交表单的。 而且貌似用的是这个开源的JS库:http://www.ohdave.com/rsa/ 想用p...

Feng_Yu
2014/06/17
953
2
Winform下动态执行JavaScript脚本获取运行结果,谈谈网站的自动登录及资料获取操作

为了有效阻止恶意用户的攻击,一般登录都会采用验证码方式方式处理登录,类似QQ的很多产品的验证码处理,但在一些OA系统中,系统通过非对称加密方式来处理登录的密码信息,登录页面每次提供对...

长平狐
2012/06/11
522
0
PHP怎么用16进制公钥进行RSA加密

是这样,要用php Curl进行站点模拟登录,而别人的站点,是对pwd密码进行了rsa加密传到后台的,如果我要curl模拟登录的话,必须也要把密码进行rsa加密模拟post提交上去。其中该站点登录页面的...

键盘浪人
2017/09/08
312
3
如何正确的在项目中接入微信JS-SDK

微信JS-SDK的功能 如果你点进来,那么我相信你应该知道微信的JS-SDK可以用来做什么了。微信的官方文档描述如下。 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。...

detectiveHLH
2018/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式架构 实现分布式锁的常见方式

一、我们为什么需要分布式锁? 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制...

太猪-YJ
44分钟前
3
0
GitLab Docker 安装记录

安装环境 环境Centos7.4 64 1.拉取镜像文件 docker pull gitlab/gitlab-ce:latest 2.docker 安装 git.zddts.com 为访问域名或换成可以访问的IP docker run -d --hostname git.***.com -p ......

侠者圣
今天
0
0
部署kubernates dashboard

参考官方文档: https://github.com/kubernetes/dashboard 直接部署官方默认的dashboard: kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/r......

猫海豚
今天
0
0
Docker中Redis的安装

一、下载镜像 docker pull redis 二、创建外挂目录及配置 mkdir /opt/docker/redismkdir /opt/docker/redis/confmkdir /opt/docker/redis/data 三、安装 docker run -d --name compose_r......

闊苡訆涐囍醣
今天
0
0
JNI内存泄露处理方法汇总

在c++中new的对象,如果不返回java,必须用release掉,否则内存泄露。包括NewStringUTF,NewObject。如果返回java不必release,java会自己回收。   jstring jstr = env->NewStringUTF((*p)....

shzwork
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部