【difeng】笛风三方接口请求加密算法python版

本文详细介绍了笛风加密算法的实现过程,包括参数排序、MD5加密及最终请求参数的生成。通过具体代码示例,展示了如何使用Python进行参数加密,适用于酒店或机票等不同类型的数据加密需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Look at

来来回回大改3次,碰到参数相同的情况。
最终发现他的排序方式不是直接key去排序而是根据 str(key=value)的值去排序。
感谢JAVA同学帮我debug运行官方工具类
ps:直接使用param_encrypt_df返回的参数请求即可

import hashlib
from collections import OrderedDict

class Utils:

	@staticmethod
    def text_to_md5(text):
        """
        :param text: 文本类型
        :return: md5text
        """
        if type(text) == str:
            # 生成一个md5对象
            m1 = hashlib.md5()
            # 使用md5对象里的update方法md5转换
            m1.update(text.encode("utf-8"))
            md5_text = m1.hexdigest()
            return md5_text
        else:
            raise ValueError("请传入Str类型数据!")
            
            
	@staticmethod
    def param_encrypt_df(data_param, third_type):
        """
        笛风加密算法
        :param: data_param:传入DICT入参
        :param: third_type: 类型,酒店或者机票
        :return:  返回加密请求参数,可直接使用参数请求(类型dict)
        """
        if third_type == 'hotel':
            api_key = 'hoteltest'
            secret_key = 'your_secret_key '
        elif third_type == 'air':
            api_key = 'dflighttest'
            secret_key = 'your_secret_key '
        else:
            raise ValueError("Type错误!")

        if type(data_param) == dict:

            timestamp = Utils.get_current_datetime()
            data_param['apiKey'] = api_key
            data_param['timestamp'] = timestamp

            sort_param_list = Utils.sort_param(data_param)[1]

            # 转换成用&连接的字符串
            sort_param_list = sorted(sort_param_list, key=lambda x: x, reverse=False)

            str_data = ''
            for item in sort_param_list:
                str_data += item + '&'
			
			# md5
            sign = Utils.text_to_md5(secret_key + '&' + str_data + secret_key).upper()
			
			# 移除项
            data_param.pop('apiKey')
            data_param.pop('timestamp')
            
			# 拼接最终请求参数
            secret_param = dict()
            secret_param['apiKey'] = api_key
            secret_param['sign'] = sign
            secret_param['timestamp'] = timestamp
            secret_param['data'] = data_param

            return secret_param
        else:
            raise ValueError("请传入dict类型")

    @staticmethod
    def sort_param(data_param):
        """
        :param data_param:
        :return:order_dict,order_list
        """

        # 最终需要的参数列表
        order_list = []
        # 暂存用dict
        order_dict = OrderedDict()

        # 遍历参数
        for key, value in data_param.items():

            # 可能存在相同的key所以用list存放
            order_dict[key] = []

            if type(value) == list:
                for item in value:
                    return_dict = Utils.sort_param(item)
                    for list_key, list_value in return_dict[0].items():
                        order_list.append(str(list_key) + '=' + str(*list_value))

            elif type(value) == dict:
                return_dict = Utils.sort_param(value)
                for dict_key, dict_value in return_dict[0].items():
                    order_list.append(str(dict_key) + '=' + str(dict_value))
            else:
                if value == '':
                    # 跳过为空参数
                    pass
                else:
                    order_list.append(str(key) + '=' + str(value))
                    order_dict[key].append(value)

        return order_dict, order_list
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值