• python接口自动化(十九) 签名(signature)鉴权(authentication)之加密(HEX,MD5,HMAC-SHA256)


    前言

    开放的接口为了避免被别人乱调用,浪费服务器资源,这就涉及到签名(Signature)加密了

    API使用签名方法(Signature)对接口进行鉴权(Authentication)。每一次请求都需要在请求中包含签名信息,以验证用户身份。

    接口签名

    1.根据需求文档,看接口的签名规则,每个公司的签名规则都不一样,以下仅供参数。

     2.从这个文档中可以看出涉及到以下几个点:

    • HMAC-SHA256

    HMAC(Hash-based Message Authentication Code)常用于接口签名验证支持的算法有md5,sha1、sha256、sha512、adler32、crc32等

    • Binary2HEX

    将二进制转换为HEX

    • Lowercase

    将字符串转为小写

    • MD5(HTTP body)

    对post请求body进行md5加密

    • Unix时间戳

    Unix格式的时间戳,单位s

    MD5加密

    1.md5加密比较简单,直接调用hashlib内置的库就能解决

    import hashlib
    def md5_jiami(p):
        m=hashlib.md5()
        m.update(p.encode('UTF-8'))
        return m.hexdigest()
    print(md5_jiami('123456'))
    

     运行结果

     timestamp

    1.生成Unix时间戳,由于python里面获取的是带小数点的,转int类型,就可以了

    import time
    print(time.time())
    print(int(time.time()))
    

     运行结果

     hmac_sha256加密

    1.先用hmac里面方法生成signature字符串,注意new()里面传的两个参数是bytes类型

    import hmac
    import hashlib
    appkey="one"
    strToSign="six"
    #hmac_sha256加密
    signature=hmac.new(bytes(appkey,encoding='utf-8'),bytes(strToSign,encoding='utf-8'),digestmod=hashlib.sha256).digest()
    #print(signature)
    #二进制转为HEX
    HEX=signature.hex()
    #print(HEX)
    #将字符串换为小写
    lowsigne=HEX.lower()
    print(lowsigne)
    
    s=hmac.new(bytes(appkey,encoding='utf-8'),bytes(strToSign,encoding='utf-8'),digestmod=hashlib.sha256).hexdigest().lower()
    print(s)  

     运行结果

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    如何在typescript中引入jquery
    Project 'com.cooldatasoft:spring-boot-starter-parent:2.3.10.RELEASE' not found
    FTP服务器需要开几个端口
    c# 创建 windows 托盘图标及上下文菜单
    postgresql 查询表注释 和 字段注释
    idea 使用技巧识记
    c# 基元数据类型占用字节数
    proxifier 配合 fiddler 网络监控 使用方法备忘
    c# 反射备忘
    Delphi IdFTP[3] TIdFTP.Connect、IdFTP.ReadTimeout
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13442668.html
Copyright © 2020-2023  润新知