| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- # -*- coding: utf-8 -*-
- # Author : Charley
- # Python : 3.8.10
- # Date : 2025/4/15 10:29
- import hashlib
- import json
- import random
- import time
- def return_new_url(url_):
- # 去掉查询参数部分(? 后面的内容)
- path_without_query = url_.split("?")[0]
- # 按 "/" 分割路径
- path_parts = path_without_query.split("/")
- # 返回最后一部分
- return path_parts[-1]
- def generate_random_string():
- # 使用 random.random() 生成随机数并转换为 36 进制字符串,截取最后 10 个字符
- part1 = ''.join(random.choices('0123456789abcdefghijklmnopqrstuvwxyz', k=10))
- part2 = ''.join(random.choices('0123456789abcdefghijklmnopqrstuvwxyz', k=10))
- return part1 + part2
- #
- def sort_asc(t: dict):
- """
- 定义一个函数 sort_asc,用于对字典 t 的键进行排序,并返回一个新的字典 o
- :param t: dict
- :return: sorted_dict
- """
- # 按字母顺序对字典的键进行排序
- sorted_keys = sorted(t.keys())
- # print('排序后的参数为:', sorted_keys)
- # 创建一个新的有序字典
- sorted_dict = {key: str(t[key]) for key in sorted_keys}
- return sorted_dict
- def get_sign(url_: str):
- """
- 定义 get_sign 函数,用于生成 MD5 签名
- :param url_: url
- :return: nonce, timestamp, md5_hash
- """
- url_p = return_new_url(url_)
- # 生成随机字符串 n 和时间戳 a
- n = generate_random_string()
- # print('nonce的值为:', n)
- a = str(int(time.time() * 1000)) # 当前时间戳(毫秒)
- # f = {
- # 'timestamp': "1744693310566", # 时间戳
- # 'nonce': "x0hs3t1hwyvsd5foi7dn", # 随机字符串
- # 'salt': "1s2JTL0F9u8^=m6-dW]6yLU1T50ppr8m", # 固定盐值
- # 'url': "getCardCollageInfoByIdByShare" # 路由标识
- # }
- f = {
- 'timestamp': a, # 时间戳
- 'nonce': n, # 随机字符串
- 'salt': "1s2JTL0F9u8^=m6-dW]6yLU1T50ppr8m", # 固定盐值
- 'url': url_p # 路由标识
- }
- # 对输入字典进行浅拷贝并排序
- sorted_data = sort_asc(f)
- # print('排序后的参数为:', sorted_data)
- # 将排序后的字典转换为 JSON 字符串
- json_string = json.dumps(sorted_data, separators=(',', ':'))
- # print('加密前的参数为:', json_string)
- # 使用 hashlib 创建 MD5 哈希
- md5_hash = hashlib.md5(json_string.encode('utf-8')).hexdigest()
- return n, a, md5_hash
- # 主程序
- if __name__ == "__main__":
- url = "https://app.cardplayd.com/app/system/shop/queryShopList"
- sign = get_sign(url)
- print('加密后的 sign 为:', sign)
- # 2b3865f7fc38e94ed0b9f673c3a6a104
- # "x0hs3t1hwyvsd5foi7dn" "6531a8d9fb78f5d3969b853cf31fbcd9"
|