【问题标题】:Generate HMAC SHA256 signature Python生成 HMAC SHA256 签名 Python
【发布时间】:2018-12-24 08:14:01
【问题描述】:

尝试为 3Commas 生成 HMAC SHA256 签名,我使用来自 official example 的相同参数,它应该生成: “30f678a157230290e00475cfffccbc92ae3659d94c145a2c0e9d0fa28f41c11a”

但我生成: “17a656c7df48fa2db615bfc719627fc94e59265e6af18cc7714694ea5b58a11a”

这是我尝试过的:

secretkey = 'NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j'
totalParams = '/public/api/ver1/accounts/new?type=binance&name=binance_account&api_key=XXXXXX&secret=YYYYYY'
print 'signature = '+hashlib.sha256((secretkey+totalParams).encode('ASCII')).hexdigest()

谁能帮帮我?

【问题讨论】:

    标签: python python-3.x hmac


    【解决方案1】:

    尝试使用hmac 模块而不是hashlib 模块:

    import hmac
    import hashlib
    secret_key = b"NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j"
    total_params = b"/public/api/ver1/accounts/new?type=binance&name=binance_account&api_key=XXXXXX&secret=YYYYYY"
    signature = hmac.new(secret_key, total_params, hashlib.sha256).hexdigest()
    print("signature = {0}".format(signature))
    

    这给出了预期的结果:

    signature = 30f678a157230290e00475cfffccbc92ae3659d94c145a2c0e9d0fa28f41c11a
    

    【讨论】:

    • 为什么变量前有'b'。像这样secret_key = b"
    • 我正在使用字节文字,这实际上相当于编写 ''.encode('ASCII') 但没有创建中间字符串。由于 hmac.new 方法调用接受字节作为其参数。 docs.python.org/3/library/stdtypes.html#bytes-objects
    【解决方案2】:

    几年前我确实使用不同的方法实现了它。

    import hmac
    import hashlib 
    import binascii
    
    def create_sha256_signature(key, message):
        byte_key = binascii.unhexlify(key)
        message = message.encode()
        return hmac.new(byte_key, message, hashlib.sha256).hexdigest().upper()
    
    create_sha256_signature("E49756B4C8FAB4E48222A3E7F3B97CC3", "TEST STRING")
    

    https://www.gauravvjn.com/generate-hmac-sha256-signature-in-python/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多