PYTHON实现签签名的过程解析

  

签署签名是用于提供给外部(第三方)调用的接口,调用方需要提供正确的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种方式打印出来的实际结果如下:

  

 PYTHON实现签签名的过程解析

  

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

  

期望的结果如下:(按字母顺序:密码开头的在用户名前面)
  

  

" Password123456usernameTest "

  

代码实现:
  

        # TODO按字母升序排序=" " . join(排序(列表)   打印(排序)      

实际结果:

  

 PYTHON实现签签名的过程解析

  

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

  

期望结果:
  

  

Password123456usernameTest111222333
  

  

代码实现:
  

        #待办事项3:在第二步得到的字符串后面,加上接入方验证密匙键,然后计算md5值,   结果=+ appkey排序   打印(结果)      

实际结果:

  

 PYTHON实现签签名的过程解析

  

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

  

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

  

代码实现:
  

        # todo MD5加密,固定的写法   def jiami (params):   m=hashlib.md5 ()   m.update (params.encode (“utf - 8”))   返回m.hexdigest ()      符号=jiami (result.lower()) #低()把字符转为小写   打印(签字)      

实际结果:

  

 PYTHON实现签签名的过程解析

  

全部过程如下:

        “签签名主要是用于提供给外部(第三方)调用的接口,需要提供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实现签签名的过程解析