def test():
json_dict = {
"page": 1,
"limit": 20,
"usr": "1234567890",
"key": "383280183104810",
"session": "l2fK0jf20jjfF032",
"timestamp": "1632720008993"
}
print('json_dict type:')
print(type(json_dict))
json_str = json.dumps(json_dict, sort_keys=True)
print('json_str type:')
print(type(json_str))
s = ''
for (k, v) in json.loads(json_str).items():
#按参数字母表中顺序排序,然后拼接:k1=v1k2=v2...
s = s + str(k) + "=" + str(v)
print('s in below:\n{}'.format(s))
sig_s = md5(s.encode('utf8')).hexdigest()
print('sig of s is:'+sig_s)
f = zip(json_dict.keys(), json_dict.values())
#print(f)
c = sorted(f)
print(c)
结果如下:
json_dict type:
<class 'dict'>
json_str type:
<class 'str'>
s in below:
key=383280183104810limit=20page=1session=l2fK0jf20jjfF032timestamp=1632720008993usr=1234567890
sig of s is:32514c8fad28a2f7921dbf04eafa82c0
[('key', '383280183104810'), ('limit', 20), ('page', 1), ('session', 'l2fK0jf20jjfF032'), ('timestamp', '1632720008993'), ('usr', '1234567890')]
这里也有个示例
def test2():
str1 = "languageId=0&accessToken=0E4730695CDD9B4F8D56B8107171F525-001407107122545&outTradeNo=148879135312969764307b4a86&payPlatform=1&packageName=com.baidu.vodx&payMode=2&price=0.01&payInfoId=15543373&version=6.2&productname=book&sourceType=1&thirdAppCallBack=&timeStamp=1488793412&thirdappName=com.qq.vod"
# string 拆分为List
strSplit = str1.split('&') # str.split(str="", num=string.count(str)).
print (strSplit)
print ('\n')
# List排序
strSorted = sorted(strSplit)
print("list sorted")
print (strSorted)
print ('\n')
# List转为string,以&连接
strConvert = '&'.join(strSorted)
print(strConvert + '\n')
def dev_ascii_sort():
str1="languageId=0&accessToken=0E4730695CDD9B4F8D56B8107171F525-001407107122545&outTradeNo=148879135312969764307b4a86&payPlatform=1&packageName=com.baidu.vodx&payMode=2&price=0.01&payInfoId=15543373&version=6.2&productname=book&sourceType=1&thirdAppCallBack=&timeStamp=1488793412&thirdappName=com.qq.vod"
#string 拆分为List
strSplit=str1.split('&') #str.split(str="", num=string.count(str)).
print("strSplit in below:")
print (strSplit)
print ('\n')
#List排序
strSorted=sorted(strSplit)
print("strSorted in below:")
print (strSorted)
print ('\n')
#List转为string,以&连接
strConvert = '&'.join(strSorted)
print("strConvert in below:")
print(strConvert+'\n')
def dev_ascii_sort_req_body():
import requests
import json,hmac,base64
from hashlib import sha256
header = {'content-type':'application/json'}
url = r'http://ip:port/urlpath'
reqBody = {
"appId": "APP_60924EAB150441E79280F240769C27D2",
"deviceId": "DEV_C42F9FCEE6304F64A14C8016F78663AD",
"signAlgo": "HMAC",
"bussinessId": "{{bussinessId}}",
"version": "1.0",
"name": "xxxxx",
"idNumber": "xxxx",
"mobile":"xxx"
}
#对参数进行排序,
str1 = ''
s1 = sorted(list(reqBody.keys()))
print("s1 in below:")
print(s1)
for i in s1:
str1 = f'{str1}&{i}={reqBody[i]}'
print("str1 in below:")
print(str1)
#s2为最终排序结果
s2 = str1[1:].encode('utf-8')
print("s2:")
print(s2)
secret = 'mLA6Aoyx7KzPaEtri6X1qYYCYZXvSxIV'.encode('utf-8')
#进行hmac
x = hmac.new(secret,s2,digestmod=sha256).digest()
#进行base64编码
signature = base64.b64encode(x)
print("signature in below:")
print(signature)
reqBody['signature'] = signature.decode('utf-8')
#res = requests.post(url=url,headers=header,data=json.dumps(reqBody))
#print(res.json())