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

签名参数sign生成方法:

假设有请求参数如下:

appkey = "111222333"

body = {

"username": "Test",

"Password": "123456",

"mail": "",

"sign": "xxx"

}

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

期望的结果如下:

["usernameTest","Password123456"]

代码实现2种方式:

1:for循环实现:

list =[]for i inbody.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种方式打印出来的实际结果如下:

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

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

“Password123456usernameTest”代码实现:

#TODO 按字母升序排序

sort = "".join(sorted(list))print(sort)

实际结果:

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

期望结果:

Password123456usernameTest111222333

代码实现:

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

result = sort+appkeyprint(result)

实际结果:

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

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

代码实现:

#todo MD5加密,固定的写法

defjiami(params):

m=hashlib.md5()

m.update(params.encode("utf-8"))returnm.hexdigest()

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

print(sign)

实际结果:

全部过程如下:

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

importhashlib

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 inbody.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+appkeyprint(result)#todo MD5加密,固定的写法

defjiami(params):

m=hashlib.md5()

m.update(params.encode("utf-8"))returnm.hexdigest()

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

print(sign)

sign python_python实现sign签名相关推荐

  1. php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)

    /组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...

  2. PAT甲级1006 Sign In and Sign Out:[C++题解]字符串处理

    文章目录 题目分析 题目链接 题目分析 读入三个字符串. 需要记录最早开门的人的id和时间,最晚离开的人的id和时间. 本题的简单之处在于 时间的位数都相同,比如 10点和01点.因此这样的时间大小比 ...

  3. Sign In and Sign Out

    1006. Sign In and Sign Out (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  4. 1006. Sign In and Sign Out (25)

    1006. Sign In and Sign Out (25) 问题描述: At the beginning of every day, the first person who signs in t ...

  5. [Java] 1006. Sign In and Sign Out (25)-PAT甲级

    1006. Sign In and Sign Out (25) At the beginning of every day, the first person who signs in the com ...

  6. 【PAT甲】1006 Sign In and Sign Out (25分)循环模拟

    problem 1006 Sign In and Sign Out (25分) At the beginning of every day, the first person who signs in ...

  7. [sign in和sign up哪个是注册?哪个是登入?]

    sign in和sign up的意思: 如果是网站的话sign up是注册,sign in是登录的意思,另外,sign out退出

  8. (翻译)‘Sign Up’ 和‘Sign In’按钮让用户混淆的原因

      你能多快看出"Sign Up(PS:注册)"和"Sign In(PS:登录)"的区别?将它们作为按钮名称同时使用,会让用户点错按钮.出现上述问题并不是用户的 ...

  9. sign python_python机器学习

    1.os库 2.pandas 2.1字典生成pandas 2.2字典生成pandas并序列化数据 3 .split 3.1 strip() 4.numpy 4.1 numpy.tile 4.2 num ...

最新文章

  1. 拦截器获取不到sesssion作用域的值_ES6--块级作用域
  2. Java数字包装类基本程序,Java基本数据类型包装类
  3. 算法提高课-搜索-双向广搜 AcWing 190. 字串变换:bfs、双向bfs、queue和unordered_map
  4. ngnix的upstream模块配置详解
  5. Exceptionless(二) - 使用进阶
  6. linux头文件 库,Linux操作系统的头文件和库文件搜索路径
  7. php 静态页面模板类,dedetag.class.php 静态模板类
  8. 发布你的程序包到Nuget
  9. Some Knowledge
  10. Linux内核启动:setup_arch
  11. 如何编译 opencv3 和 opencv_contrib(Linux)
  12. 开源中国iOS客户端学习——(七)MBProgressHUD特效
  13. 传智播客 C/C++学习笔记 数组和指针的关系, 字符串学习
  14. 按群计数10以内_10米12米60吨地磅扬州地磅数字地磅厂-鹰衡称重
  15. STM32F103红外遥控
  16. IntelliJ IDEA汉化解决方案教程
  17. realtek高清晰音频管理器没有设备高级设置怎么设置音箱与耳机同时响
  18. 小程序嵌套h5页面_小程序内嵌H5的方法介绍
  19. Android性能优化—— 黑白屏启动优化
  20. 业内首发 | 区块链数据服务 - BDS

热门文章

  1. SAP ECC 6.0有哪些增强功能
  2. F110报错:Company codes **/** do not appear in proposal ***; correct
  3. PP后台配置-定义工作中心标准值
  4. SAP实施项目中顾问与客户的有效沟通
  5. 操作系统都是用c语言写的吗,用C语言写关于操作系统的一个问题。
  6. 读取word对应页码_毕业论文怎样自动生成目录及从任意页开始排页码
  7. c语言中式如何定义变量,“新中式”住宅该怎样定义?这场跨界对话给你看建发的答案...
  8. CTF-杂项之工具使用汇总(一)
  9. java 安装报错2503_Windows安装Node.js报错:2503、2502的解决方法
  10. python计算文件md5值