0


接口加密|postman报文加密处理+java/python加密处理

一、加密方式:

  • 对称式加密:DES,AES,Base64 可以加密也可以解密。
  • 非对称式加密:RSA 公钥加密,私钥解密,私钥加密,公钥解密
  • 只加密不解密:MD5,SHA256 只加密不解密

二、demo演示

结合自己项目中遇到的问题和网络上的相关分享,作此总结

用到:RSA——非对称加密算法——每次加密的得到的结果位数一样,但是具体内容不一样

大致内容:请求体 json 设置 sign 参数,取 token 前 50 位再拼接上 timestamp 值,然后通过 RSA 公钥加密得到 的字符串

1、postman具体操作

需要在postman 中的pre-request里面设置,通过JavaScript代码把参数加密后,存为全局变量后,接口参数使用全局变量里的参数发起请求

Pre-request Script 编写前置脚本

1.1 脚本执行顺序

先执行前置脚本——>发起request请求——>收到接口返回结果——>执行 test script

1.2 编写前置脚本
//引入forge_min.js
const forge_url = 'https://lzq1357.gitee.io/various/forge_min.js';
//forge_min.js来自:https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js

// ------ 导入RSA ------//
//第一次运行从网络加载forgeJS,会导致请求失败
if(!pm.globals.has('forgeJS')){
    console.log('request forge.js from ' + forge_url);
    pm.sendRequest(forge_url, function (err, res) {
            if (err) {
                console.error(err);
            } else {
                console.info("request forgs.js: Succeed, please try again");
                //注意:Pre-request Script中出现报错,可能会导致pm.globals.set失效
                // 保存至全局变量中,forgeJs 为 key,res.text() 为value值
                pm.globals.set('forgeJS', res.text());
            }
        }
    );
    return;
}

//eval函数它的作用是把对应的字符串解析成js代码并运行(将json的字符串解析成为JSON对象);
eval(pm.globals.get('forgeJS'));

//注意此处上下的BEGIN PRIVATE KEY不要删除,框架自带的
const public_key = '-----BEGIN PUBLIC KEY-----\n'+ 。。。。。'+ 
    '-----END PUBLIC KEY-----' + '\r'; 

//公钥 
var publicKey = forge.pki.publicKeyFromPem(public_key); 
//时间戳 
var timestamp = Math.round(new Date().getTime()/1000); 
//获取 token 
var token =pm.environment.get("token"); 
//拼接 token 和实际戳: token 前 50 位+timestamp 
var tempStr = token.substring(0,50)+timestamp;
//------------ RSA 加密得到签名 -----------
var sign = forge.util.encode64(publicKey.encrypt(tempStr, 'RSAES-PKCS1-V1_5', { 
    md: forge.md.sha1.create(), mgf: forge.mgf.mgf1.create(forge.md.sha1.create()) 
    })); 
//将密文设置到环境变量 
pm.environment.set("timestamp", timestamp); 
pm.environment.set("sign", sign);
**值得注意的是,第一次运行时需要从网上加载一个forge_min.js脚本,不会执行加密。正常情况下第二次访问可以成功**。

2、java代码处理

通过maven引入本地的加密jar包处理——jar包放在工程文件中

3、python代码处理

3.1、安装 Crypto 模块
pip3 install Crypto

注意:该库 python2 名为 Crypto,模块内部导入全部是基于 Crypto,python3 中模块名虽然改为 crypto,内部导入依然使用的是 Crypto,因此,安装好了之后,需要找到该模块,手动修改包名为 Crypto,才可以正常使用。

3.2、加密
import base64 from Crypto.PublicKey 
import RSA from Crypto.Cipher 
import PKCS1_v1_5 as Cipher_pkcs1_v1_5 

def rsaEncrypt(msg): 
  """ 
  公钥加密 
  :param msg: 要加密内容 
  :type msg:str 
  :return: 加密之后的密文 
  """ 
  
  key = '-----BEGIN PUBLIC KEY-----\n
公钥内容
  -----END PUBLIC KEY-----\n'
  publickey = RSA.importKey(key) 
  cipher = Cipher_pkcs1_v1_5.new(publickey) 
  # 分段加密 
  cipher_text = [] for i in range(0, len(msg), 80): 
    cont = msg[i:i + 80] 
    cipher_text.append(cipher.encrypt(cont.encode())) 
  # base64 进行编码 
  cipher_text = b''.join(cipher_text) 
  cipher_result = base64.b64encode(cipher_text) 
  # 返回密文 
  return cipher_result.decode() 
    if __name__ == '__main__': 
  # 待加密内容 pwd = "123qwe"
  # 加密操作 
  en_msg = rsaEncrypt(msg=pwd) 
  print('加密密文:', en_msg)

参考:

Postman访问加密接口(RSA) - 简书

标签: postman 测试工具

本文转载自: https://blog.csdn.net/weixin_40772077/article/details/135641613
版权归原作者 墨撕酒家 所有, 如有侵权,请联系我们删除。

“接口加密|postman报文加密处理+java/python加密处理”的评论:

还没有评论