python的sign签名函数

时间:2025-04-01 09:16:28
1、sign签名:用于提供给外部(第三方)调用的接口,调用方需提供正确的appkey才能调用,确保接口的安全性。 A公司给B公司开发了一个接口,那么A公司给B公司一个sign签名,确保数据的安全。 客户端:当用户请求服务前,会定义请求参数,通过这些参数,生成相应的sign签名,生成之后,传给服务器。 服务端:接收传过来的请求数据,先根据传过来的参数,生成sign签名,之后与客户端传来的sign签名进行一个比对,如果两个sign签名一致,则允许访问服务器数据,否则禁止访问。 2、 sign签名的加密方法: (1 将所有的参数去除sign本身以及值为空的参数 (2 将以上的的参数按照字母升序排序 (3 将排序后的参数按照:参数11参数22……拼接成一个字符串 (4 将秘钥拼接在字符串后面 (5 将以上字符全部换成小写,通过md5计算加密,得到sign值 (6 将这个值传到服务器,服务器进行解码,识别这个值是否是我们要传的请求,如果是,则返回值。 # 举个栗子:一个请求的body参数为以下:,提供的apikey为123456 # body = { # "username":"test", # "password":"123456", # "mail":"", # "sign":"签名后的值" # } 接下来使用python实现签名 def jiami(apikey,body): # 1、去除值为空以及sign值的参数 list=[] for i in body.items(): # print(i) 遍历出来的是元组('username', 'test')。 if i[0]!='sign' and i[1]!='': list.append("".join(i)) # 将遍历出来的元组进行拼接。 print('去除值为空以及sign值的参数后的list:%s'%list) # 2、 将以上的的参数按照字母升序排序 list.sort() # 默认为升序排序,sort返回结果是一个list print('参数按照字母升序排序的list:%s'%list) # 3、将排序后的参数按照:参数1值1参数2值2……拼接成一个字符串 list_a="".join(list) print('拼接后返回的新的字符串:%s' % list_a) # 4、 将秘钥拼接在字符串后面 result = list_a + apikey print('秘钥拼接在字符串后的结果:%s' % result) # 5、将以上字符全部换成小写,通过md5计算加密 import hashlib def jiamind5(src): # 函数嵌套一个函数 m = hashlib.md5() # 创建一个对象 m.update(result.encode('UTF-8')) return m.hexdigest() # print(sign) sign = jiamind5(src='result') print(sign) # 得到sign签名后的新的body值 body['sign'] = sign # 将sign值更新到body print(body) if __name__=='__main__': apikey = "123456" # 秘钥,由开发提供 body = { # 这是我们要传的参数 "username": "test", "password": "123456", "mail": "", "sign": "签名后的值" } jiami(apikey, body)