0


用给定的key对字符串进行sha256加密-postman预处理

接口在请求时,需要将参数排序后进行sha256加密,获取sign,作为参数。

postman的预处理,找不到方法可以对字符串进行有key的sha256加密,所以用python写一个加密接口,在预处理中调用加密接口即可

1.python文件

"""
@Describe:对请求参数进行排序拼接,后进行加密获取sign
"""import ast

from flask import Flask,request
import json
import base64
import hmac
from hashlib import sha256
import time

app=Flask(__name__)#只接受post请求@app.route("/jiami",methods=["POST"])defcheck():#默认返回内容
    t=int(time.time())
    return_dict={'return_code':'200','retuen_msg':'加密成功','nowtime':t}#判断传入的数据是否为空if request.get_data()isNone:
        return_dict['return_code']='1001'
        return_dict['retuen_msg']='请求参数不能为空'return json.dumps(return_dict,ensure_ascii=False)#获取传入的参数,并转成json
    get_data_dict=request.get_data()try:
        get_data_json = json.loads(get_data_dict, strict=False)except:
        return_dict['return_code']='1002'
        return_dict['retuen_msg']='请求参数格式必须为json'return json.dumps(return_dict, ensure_ascii=False)

    all_str=get_sort_string(get_data_json,t)
    sign=jm_sha256(all_str)
    return_dict['retuen_msg']=sign

    return json.dumps(return_dict,ensure_ascii=False)defget_sort_string(old_value,t):if'time'in old_value.keys():
        old_value['time']=str(t)if'sign'in old_value.keys():
        old_value.pop('sign')# 将参数(字典)进行升序排序
    new =sorted(old_value.items())
    new_value =dict(new)

    str_sign =""for key, value in new_value.items():# print(key,value)
        str_sign = str_sign + key +"="+ value +"&"# print(str)
    str_sign_final = str_sign.strip("&")print("加密前",str_sign_final)return str_sign_final

defjm_sha256(str_sign):'''
    :key: 接口文档中提供的密钥,根据需求修改
    :str_sign: 需要加密的字符串字符串
    :return:混淆后的加密结果
    '''
    key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    key=key.encode("utf-8")
    message = str_sign.encode("utf-8")#进行加密
    sign_before=hmac.new(key, message, digestmod=sha256).digest()
    sign=base64.b64encode(sign_before)
    string_sign =str(sign,'utf-8')print("加密后",string_sign)return string_sign

if __name__ =='__main__':
    app.run(debug=True)

运行jiami.py文件。运行后,可以通过访问http://127.0.0.1:5000/jiami实现参数加密

2.postman预处理代码
预处理语句中,已将时间戳,和sign设置为全局变量,分别是:nowtime和sign。所以在做接口测试时,时间戳和sign使用全局变量即可。

//获取参数let queryParam = pm.request.url.query.members;let param = request.data;

console.log(param);
console.log(typeof(param))//调用加密接口const loginRequest ={url:'http://127.0.0.1:5000/jiami',method:'POST',header:'Content-Type:application/json',body:{mode:'raw',raw:JSON.stringify(param)}};// 发送请求
pm.sendRequest(loginRequest,function(err, res){
    console.log(res.json());
    sign=res.json()['retuen_msg']
    nowtime=res.json()['nowtime']

    pm.globals.set("sign",sign);
    pm.globals.set("nowtime",nowtime)});

例子
在这里插入图片描述

标签: flask python 后端

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

“用给定的key对字符串进行sha256加密-postman预处理”的评论:

还没有评论