PYTHON实现SIGN签名的过程解析

作者:圆觉 时间:2021-08-09 13:29:05 

sign签名是用于提供给外部(第三方)调用的接口,调用方需要提供正确的appkey钥匙才能调用,确保了接口的安全性。

签名参数sign生成方法:

假设有请求参数如下:


appkey = "111222333"
body = {
 "username": "Test",
 "Password": "123456",
 "mail": "",
 "sign": "xxx"
}

第一步:将所有参数(注意是所有参数),除去sign本身,以及值为空的参数,转化为键值对,没有等于号的字符串。

期望的结果如下:

["usernameTest","Password123456"]

代码实现2种方式:

1:for循环实现:


list = []
for i in body.items():
 if i[1] != "" and i[0] != "sign":
   list.append("".join(i))
print(list)

2:列表生成式实现:


s = ["".join(i) for i in body.items() if i[1] != "" and i[0] != "sign"]
print(s)

2种方式打印出来的实际结果如下:

PYTHON实现SIGN签名的过程解析

第二步:排序后的参数按照参数1值1,参数2值2的键值对顺序拼接成一个字符串,按参数名字母顺序升序排序。(具体升降顺序得问开发,一般为升序)

期望的结果如下:(按字母顺序:Password开头的在username前面)

“Password123456usernameTest”

代码实现:


# TODO 按字母升序排序
sort = "".join(sorted(list))
print(sort)

实际结果:

PYTHON实现SIGN签名的过程解析

第三步:在前面得到的字符串后面,加上接入方验证密匙appkey。

期望结果:

Password123456usernameTest111222333

代码实现:


# todo 3:在第二步得到的字符串后面,加上接入方验证密匙key,然后计算md5值,
result = sort+appkey
print(result)

实际结果:

PYTHON实现SIGN签名的过程解析

第四步:然后将这个字符串换为小写进行md5加密计算,得到的这个值即为sign签名值。

注意,计算md5之前请确保接口与接入方的字符串编码一致,如统一使用utf-8编码或者GBK编码,如果编码方式不一致则计算出来的签名会校验失败。

代码实现:


# todo MD5加密,固定的写法
def jiami(params):
 m = hashlib.md5()
 m.update(params.encode("utf-8"))
 return m.hexdigest()

sign = jiami(result.lower())  #lower()把字符转为小写
print(sign)

实际结果:

PYTHON实现SIGN签名的过程解析

全部过程如下:


'''sign签名主要是用于提供给外部(第三方)调用的接口,需要提供appkey钥匙才能调用'''
import hashlib

appkey = "111222333"
body = {
 "username": "Test",
 "Password": "123456",
 "mail": "",
 "sign": "xxx"
}
# todo 第1步: 将所有参数(注意是所有参数),除去sign本身,以及值是空的参数,转化为键值对的

#s = ["".join(i) for i in body.items() if i[1] != "" and i[0] != "sign"]
#print(s)

list = []
for i in body.items():
 if i[1] != "" and i[0] != "sign":
   list.append("".join(i))
print(list)

# todo 2:排序后的参数按照参数1值1,参数2值2的键值对顺序拼接成一个字符串,按参数名字母升序排序
# TODO 按字母升序排序
sort = "".join(sorted(list))
print(sort)

# todo 3:在第二步得到的字符串后面,加上接入方验证密匙key,然后计算md5值,
result = sort+appkey
print(result)

# todo MD5加密,固定的写法
def jiami(params):
 m = hashlib.md5()
 m.update(params.encode("utf-8"))
 return m.hexdigest()

sign = jiami(result.lower())  #lower()把字符转为小写
print(sign)

来源:https://www.cnblogs.com/xiamaojjie/p/11749968.html

标签:python,sign,签名
0
投稿

猜你喜欢

  • python实现人机对战的井字棋游戏

    2023-02-11 15:37:45
  • 详解用Node.js实现Restful风格webservice

    2024-05-13 09:35:20
  • Java连接Mysql 8.0.18版本的方法详解

    2024-01-24 10:08:29
  • MySQL8.0.21安装步骤及出现问题解决方案

    2024-01-22 20:43:44
  • 详解Python GUI工具取色器

    2021-01-23 10:12:04
  • beam search及pytorch的实现方式

    2023-08-02 10:29:30
  • sqlserver获取当前日期的最大时间值

    2024-01-16 06:54:24
  • phpstudy无法启动MySQL服务的完美解决办法

    2024-05-22 10:08:59
  • python链表的基础概念和基础用法详解

    2021-02-26 07:13:50
  • FCKeditor编辑器基本配置优化修改使用方法

    2008-12-31 13:32:00
  • python基础之while循环语句的使用

    2021-03-16 16:54:20
  • Python使用Matplotlib实现雨点图动画效果的方法

    2023-02-04 10:32:05
  • Jupyter Notebook 文件默认目录的查看以及更改步骤

    2022-03-22 15:01:19
  • python写的一个squid访问日志分析的小程序

    2021-08-02 14:09:09
  • javascript一些不错的函数脚本代码

    2023-07-02 05:25:52
  • Mozilla 表达式 __noSuchMethod__

    2024-04-18 09:42:21
  • 解决python彩色螺旋线绘制引发的问题

    2023-06-30 12:49:12
  • Mac在python3环境下安装virtualwrapper遇到的问题及解决方法

    2021-06-22 17:32:38
  • asp.net php asp jsp 301重定向的代码(集合)

    2023-11-14 15:02:06
  • 简单掌握Python的Collections模块中counter结构的用法

    2023-05-17 00:20:13
  • asp之家 网络编程 m.aspxhome.com