[英]Replicating HMAC from C# to Python
我正在使用由客户提供的 API,该客户提供了有关通过 C# 进行授权的示例代码,但我的公司使用 Python。 他们通过 HMAC 进行授权,并按照他们的示例代码(在 .net fiddle 上),我终于达到了我们的字节密钥和字节消息与 C# 调用相匹配的地步。
然而,当我们在他们的代码中得到这个时:
using (HMACSHA256 sha = new HMACSHA256(secretKeyByteArray))
{
// Sign the request
byte[] signatureBytes = sha.ComputeHash(signature);
我们的等价物在哪里
signature_hmac = hmac.new(
base64.b64decode(secretKey),
bytes(message, "utf8"),
digestmod=hashlib.sha256,
)
他们的signatureBytes
的字节值与我们的signature_hmac.digest()
的字节值不匹配。 如果使用相同的哈希库,并且输入的字节值匹配,我们应该得到相同的结果,对吧?
为了确保,当我说字节值匹配时, base64.b64decode(secretKey)
(Python) 的值匹配var secretKeyByteArray = Convert.FromBase64String(secretKey);
(C#)。
为我工作,确保您的输入数组在两者上完全相同。 我认为您可能缺少 base64 解码或以不同方式编码字符串。
这是我的 2 个测试:
secretKey = "wxyz".encode()
message = "abcd".encode()
signature_hmac = hmac.new(
secretKey,
message,
digestmod=hashlib.sha256,
)
x = signature_hmac.hexdigest()
和 C#
byte[] signatureBytes;
byte[] secretKeyByteArray = Encoding.UTF8.GetBytes("wxyz");
byte[] signature = Encoding.UTF8.GetBytes("abcd");
using (HMACSHA256 sha = new HMACSHA256(secretKeyByteArray))
{
signatureBytes = sha.ComputeHash(signature);
};
string x = Convert.ToHexString(signatureBytes);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.