Python加密(MD5)接口参数生成sign

    技术2026-04-12  6

    Python加密(MD5)接口参数生成sign

    API签名

    为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,TOP服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝。TOP目前支持的签名算法有: MD5(本接口通用参数里面sign_method的值为md5),签名大体过程如下:

    对所有API请求参数(包括公共参数和业务参数,但除去sign参数和byte[]类型的参数),根据参数名称的ASCII码表的顺序排序。如: foo=1, bar=2, foo_bar=3, foobar=4排序后的顺序是bar=2, foo=1, foo_bar=3, foobar=4。

    将排序好的参数名和参数值拼装在一起,根据上面的示例得到的结果为:bar2foo1foo_bar3foobar4

    把拼装好的字符串采用utf-8编码,使用签名算法对编码后的字节流进行摘要。如果使用MD5算法,则需要在拼装的字符串前后加上app的secret后,再进行摘要,如:md5(secret+bar2foo1foo_bar3foobar4+secret)

    将摘要得到的字节流结果使用十六进制表示,如: hex(“helloworld”.getBytes(“utf-8”)) = “68656C6C6F776F726C64”

    说明:MD5是128位长度的摘要算法,用16进制表示,一个十六进制的字符能表示4个位,所以签名后的字符串长度固定为32个十六进制字符。

    算法步骤

    一、接口的请求的参数(包括共同参数)进行组合 二、将参数进行ASCll排序 三、将参数拼接为一个字符串 四、字符串进行MD5加密

    def ascll_sort(requests_parm): """ASCll码排序""" def sort(param): """param参数做处理""" return requests_parm(sorted(param.items())) return sort @ascll_sort def format_parameter(sort_date): """ 拼接参数 :param sort_data: 装饰器返回的参数 :return: 所有参数拼成一个字符串 """ arr =[] for data in sort_date: for a in data: parameter = ''.join(str(a)) arr.append(parameter) param = appSecret + ''.join(arr) + appSecret return param def md5_sign(format_parameter): """ MD5数据加密 :param encrypt: format_parameter返回的字符串 :return: 返回32位 16进制 大写 """ def str_md5(param): md5 = hashlib.md5() md5.update(param.encode()) sign= md5.hexdigest() return format_parameter(sign.upper()) return str_md5 @md5_sign def sign(sign): """请求URL""" md5_sign ={ 'sign':sign } return md5_sign

    请求接口示范

    def request_url(parm, sign): data = dict(parm, **sign) response= requests.get(url, data) print(response.json()) if __name__ == '__main__': requests_data = get_access_token() # get_access_token接口请求参数 str_data = format_parameter(requests_data) # 所有参数格式化成字符串 requests_sign = sign(str_data) # 加密MD5 变成sign request_url(requests_data, requests_sign)
    Processed: 0.012, SQL: 10