随记-探究 OpenApi 的加密方式

open api 主要参数如下

  • appKey 接口Key(app id)
  • appSecret 接口密钥
  • timeStamp 时间戳 毫秒
  • nonceStr 随机字符串
  • signature 加密字符串

客户端

  • 使用 appSecret 按照一定规则将 appKey timeStamp nonceStr 进行加密,得到密文 signature
  • 将 appKey timeStamp nonceStr 和 signature 一起上传

浅析

  • timeStamp 规定一个时间段,比如十分钟,防止暴力破解
  • nonceStr,防止冲重放攻击,需要服务端记录,并保证一段时间内不能再次使用

服务端

  • 根据 appKey 从数据库获取 appSecret
  • 按照和客户端相同的规则进行加密,得到密文,对比密文

小结

  • 客户端和服务端的加密方法相同
  • 本质上属于对称加密
  • 需要用户保管好密钥
import hashlib

class SignUtil(object):
    
    @staticmethod
    def create_sign(app_secret, **kwargs):

        temp_list = []
        for key, value in kwargs.items():
             
            if value not in (None, "") and key != "sign" and key != "key":
                temp_list.append(f"{key}={value}")
            
        temp_list.append(f"key={app_secret}")
        temp_str = ("&".join(temp_list)) .encode()

        sign = hashlib.md5(temp_str).hexdigest().upper()
        
        return sign


if __name__ == "__main__":
    
    # 用户端发起请求,生成签名后发送请求
    appSecret = "7214fefff0cf47d7950cb2fc3b5d670a"
    appId = "wx123456789"
    timestamp = "1583332804914"
    # 生成签名

    sorted_dict = {
        "appId":appId, 
        "timestamp":timestamp,
    }
    signature = SignUtil.create_sign(appSecret, appId=appId, timestamp=timestamp)
    print("签名:"+ signature )

    

到此结  DragonFangQy 2023.12.20

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值