在 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='
所以我正在看的文档说用 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='