Я не знаю, что python делает с string
, который вы предоставляете в качестве ключа к методу hmac.new
, но он, похоже, не преобразует гекс в байты, и именно поэтому вы получаете разные хеши. Если я сначала конвертирую гекс в байты в python, то они оба производят одинаковое ха sh.
import hashlib
import hmac
import base64
import binascii
key = '8ea79bcec3d54597efe186780a835c075400623a11481d3d17dd92e905dbb615'
keyBytes = binascii.unhexlify(key)
tokenHash = 'st=1585258906~exp=1585261006~acl=*'
x = hmac.new(keyBytes, tokenHash.encode('utf-8'), hashlib.sha256).hexdigest()
Таким образом, может показаться, что они не производят одинаковое ха sh потому что ключ другой.
Если вы не можете изменить код python, тогда в C# вместо обработки key
как шестнадцатеричной строки и преобразования ее в byte[]
вы просто получите UTF8
байт. из строки тогда они производят тот же ха sh. Для меня, по крайней мере.
//var keyBytes = ParseHexBinary(key); Instead of this...
var keyBytes = Encoding.UTF8.GetBytes(key); //Do this.