用Python生成SHA256 HMAC签名



我正在尝试为FTX网络套接字生成SHA256 HMAC签名。我用的是官方例子中的参数https://docs.ftx.com/#private-通道。

它应该生成d10b5a67a1a941ae9463a60b285ae845cdeac1b11dc7da9977bef0228b96de9

但是我得到的是ad38fa3566de972abb736bc0db2f7cd39daa48b14421e168422303bf2f03c6de

这是我试过的:

import hmac
import hashlib
import base64
time = '1557246346499'
secret = 'Y2QTHI23f23f23jfjas23f23To0RfUwX3H42fvN-'

digest = hmac.new(bytes(time, 'UTF-8'),
bytes(secret, 'UTF-8'), hashlib.sha256)
signature = digest.hexdigest()
print(signature)

我不熟悉这些东西,但您的代码与我在使用HMAC-SHA256的Python编码消息中发现的代码不同,消息和密钥似乎被交换了
这只是一个重复,但另一件事是,你链接的文档上写着

sign:SHA256 HMAC的以下字符串,使用您的API机密:<time>websocket_login

所以您需要的不是1557246346499,而是1557246346499websocket_login

放在一起:

import hmac
import hashlib
time = '1557246346499websocket_login'
secret = 'Y2QTHI23f23f23jfjas23f23To0RfUwX3H42fvN-'

signature = hmac.new(bytes(secret , 'latin-1'), msg = bytes(time , 'latin-1'), digestmod = hashlib.sha256).hexdigest()
print(signature)

生成预期的输出。

有两个错误:第一,hmac.new()以相反的顺序接受参数:hmac.new(secret, msg, digestmod),第二,消息应该是<time>websocket_login:

import hmac
import hashlib
time = '1557246346499'
secret = 'Y2QTHI23f23f23jfjas23f23To0RfUwX3H42fvN-'

digest = hmac.new(
secret.encode(), 
f'{time}websocket_login'.encode(),
hashlib.sha256
)
signature = digest.hexdigest()
print(signature)

最新更新