签署签名是用于提供给外部(第三方)调用的接口,调用方需要提供正确的appkey钥匙才能调用,确保了接口的安全性。
签名参数标志生成方法:
假设有请求参数如下:
appkey=" 111222333 " 身体={ “用户名”:“测试”, “密码”:“123456”, “邮件”:“”, “标志”:“xxx” }
第一步:将所有参数(注意是所有参数),除去签署本身,以及值为空的参数,转化为键值对,没有等于号的字符串。
期望的结果如下:
(“usernameTest”、“Password123456”)
代码实现2种方式:
1:循环实现:
列表=[] 因为我在body.items (): 如果我[1]!=" ",我[0]!=氨曛尽? list.append (" " . join (i)) 打印(列表)
2:列表生成式实现:
s=[" . join(我)我在body.items()如果我[1]!我[0]=" !="标志"] 打印(s)
2种方式打印出来的实际结果如下:
第二步:排序后的参数按照参数1值1,参数2值的键值对顺序拼接成一个字符串,按参数名字母顺序升序排序。(具体升降顺序得问开发,一般为升序)
期望的结果如下:(按字母顺序:密码开头的在用户名前面)
" Password123456usernameTest "
代码实现:
# TODO按字母升序排序=" " . join(排序(列表) 打印(排序)
实际结果:
第三步:在前面得到的字符串后面,加上接入方验证密匙appkey。
期望结果:
Password123456usernameTest111222333
代码实现:
#待办事项3:在第二步得到的字符串后面,加上接入方验证密匙键,然后计算md5值, 结果=+ appkey排序 打印(结果)
实际结果:
第四步,然后将这个字符串换为小写进行md5加密计算,得到的这个值即为签署签名值。
注意,计算md5之前请确保接口与接入方的字符串编码一致,如统一使用utf - 8编码或者GBK编码,如果编码方式不一致则计算出来的签名会校验失败。
代码实现:
# todo MD5加密,固定的写法 def jiami (params): m=hashlib.md5 () m.update (params.encode (“utf - 8”)) 返回m.hexdigest () 符号=jiami (result.lower()) #低()把字符转为小写 打印(签字)
实际结果:
全部过程如下:
“签签名主要是用于提供给外部(第三方)调用的接口,需要提供appkey钥匙才能调用“ 进口hashlib appkey=" 111222333 " 身体={ “用户名”:“测试”, “密码”:“123456”, “邮件”:“”, “标志”:“xxx” } # todo第1步:将所有参数(注意是所有参数),除去签署本身,以及值是空的参数,转化为键值对的 # s=[" . join(我)我在body.items()如果我[1]!我[0]=" !="标志"] #打印(s) 列表=[] 因为我在body.items (): 如果我[1]!=" ",我[0]!=氨曛尽? list.append (" " . join (i)) print(列表) # todo 2:排序后的参数按照参数1值1,参数2值的键值对顺序拼接成一个字符串,按参数名字母升序排序 # TODO按字母升序排序=" " . join(排序(列表) 打印(排序) #待办事项3:在第二步得到的字符串后面,加上接入方验证密匙键,然后计算md5值, 结果=+ appkey排序 打印(结果) # todo MD5加密,固定的写法 def jiami (params): m=hashlib.md5 () m.update (params.encode (“utf - 8”)) 返回m.hexdigest () 符号=jiami (result.lower()) #低()把字符转为小写 打印(签字)PYTHON实现签签名的过程解析