美文网首页
随记-探究 OpenApi 的加密方式

随记-探究 OpenApi 的加密方式

作者: DragonFangQy | 来源:发表于2023-12-19 08:53 被阅读0次

    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

    相关文章

      网友评论

          本文标题:随记-探究 OpenApi 的加密方式

          本文链接:https://www.haomeiwen.com/subject/mmdzgdtx.html