在 python 中生成签名值

Generating a Signature Value in python

所以我正在看的文档说用 C# 生成一个签名值,但是我想在 Python 中完成所有事情这是他们给我的信息,但是预期的结果是签名:wpGKFbhcBl+8JLVXGP0QqBooK6dtLBv9bYtI15NXL1U= for SHA256,我回b'YzI5MThhMTViODVjMDY1ZmJjMjRiNTU3MThmZDEwYTgxYTI4MmJhNzZkMmMxYmZkNmQ4YjQ4ZDc5MzU3MmY1NQ=='

有人能指出我正确的方向吗?

var bytesToHash = Encoding.UTF8.GetBytes(TimeStamp.GetUnixTime() + transactionId + apiKey);
string signature = Convert.ToBase64String(GetHashAlgorithm(Algorithm).ComputeHash(bytesToHash));

我的代码:

import hashlib
import base64
epochTime = 1547498533216
transactionId = "07643622"
APIKey = "13f1fd1b-ab2d-4c1f-8e2c-ca61878f2a44"
hash256 = bytes(str(epochTime) + transactionId + APIKey,'utf-8')
print(hash256)
signature = base64.b64encode(bytes(hashlib.sha256(hash256).hexdigest(),'utf-8'))
print(signature)

hexdigest() 仅包含十六进制数字。您需要return 传递的字符串的摘要

import hashlib
import base64

epochTime = 1547498533216
transactionId = "07643622"
APIKey = "13f1fd1b-ab2d-4c1f-8e2c-ca61878f2a44"

signature = base64.b64encode(hashlib.sha256(
    (str(epochTime) + transactionId + APIKey).encode()
).digest())

print( signature.decode() )
# wpGKFbhcBl+8JLVXGP0QqBooK6dtLBv9bYtI15NXL1U=

您唯一的问题是您编码了 hexdigest(一种字符串形式,将每个字节显示为 0-9a-f 范围内的两个字符,这将用作 base64 的替代方法来制作人类可读的散列,不与其组合),而不是 digest(SHA256 散列的原始字节)。变化:

signature = base64.b64encode(bytes(hashlib.sha256(hash256).hexdigest(),'utf-8'))

至:

signature = base64.b64encode(hashlib.sha256(hash256).digest())

并且输出如您所料:b'wpGKFbhcBl+8JLVXGP0QqBooK6dtLBv9bYtI15NXL1U='