生成 HMAC SHA256 签名 Python

Sky*_*Sky 13 python hmac python-3.x

尝试为 3Commas 生成 HMAC SHA256 签名,我使用官方示例中的相同参数,它应该生成:“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()
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗?

Stu*_*eld 21

尝试使用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))
Run Code Online (Sandbox Code Playgroud)

这给出了所需的结果:

signature = 30f678a157230290e00475cfffccbc92ae3659d94c145a2c0e9d0fa28f41c11a
Run Code Online (Sandbox Code Playgroud)

  • 我使用的是字节文字,这实际上相当于编写 `''.encode('ASCII')` 但不创建中间字符串。由于 hmac.new 方法调用接受字节作为其参数。https://docs.python.org/3/library/stdtypes.html#bytes-objects (3认同)
  • 为什么变量前面有“b”。就像这样 `secret_key = b"` (2认同)