Postman报文进行加密之RSA+Bate64

发表于:2021-1-29 09:48

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:博客园

  最近在项目接口测试中使用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,"Id":"410923199305180016","userPhone":"15011385365","sign":"'+sText+'","pageSize":200,"startDate":1552355829000}';
  RSA签名就写这些。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号