Postman RSA+Bate64签名

最近在项目接口测试中使用postman进行工作,对于一般的非加密HTTP请求可以很方便直接的测试,但是有些需要签名验签的报文,就需要对报文进行加解密处理,在实际工作过程中,参考了网络上共享的资源,下面对自己工作过程做一次记录,以及自己遇到的问题进行补充。

         大体说一下流程:

请求的报文需要把参数(除sign)按照字母从a-z顺序先进行排序;

对排序后参数的值拼接成字符串即成源字符串;

用对方的RSA私钥对源字符串进行RSA算法加密生产签名sign值;

把该值传递给参数sign,对新的报文进行AES签名得到值作为正式报文中的参数encdata的值;

使用自有RSA公钥对AES密码进行RSA算法签名,得到的值作为正式报文enckey的值,新的报文生产后在进行HTTP请求。

最终的报文结构,

"{{encdata}}""{{enckey}}"需要在postman中定义的变量,变量定义设置不在这里详细说明。

引入forge.js

因为postman自带的加密函数是cryptoJS,不能满足数字RSA-SHA1签名,即java里的SHA1WithRSA因此需要接入第三方库,这里找到forge.js。forge的GitHub地址https://github.com/digitalbazaar/forge

Forge.js两种使用方式,第一种:需要下载forge.js并在本地搭建服务,在加密过程中需要调用该服务。

在Pre-request Script中使用:

第二种使用方式,复制forge.js文件的所有内容,在postman中添加forgeJS变量,值设置为forge.js文件中的所有内容。

这里使用的第一种搭建服务的方法,因为第二种因为forge.js文件太大,导致设置变量时卡死。

     对源字符串进行RSA签名

         具体的报文拼接就不再这里详细说明,假如拼接后的源字符串为“15547905120004109231993051800161200155235582900015011385365”,然后使用RSA进行私钥签名,

这里的encrypt_key私钥,你需要换成自己项目的私钥。

Encryption函数实现私钥签名,使用了forge项目中的

获取的签名sign需要进行Bate64编码,使用forge.util.encode64(sig)实现。

在我们项目中,实际获取的sText签名需要传递给源报文参数sign,进行AES加密。

var signText = '{"endDate":1554790512000,"pageNo":1,"userId":"410923199385180016","userPhone":"15011388365","sign":"'+sText+'","pageSize":200,"startDate":1552355829000}';

参考网络资源如下:

https://github.com/digitalbazaar/forge

https://testerhome.com/topics/14869

https://www.jianshu.com/p/2eb5cfb782cb

https://blog.csdn.net/majinggogogo/article/details/106589758

感谢各位的分享。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值