请,我在使用 python hmac 库验证具有 HMAC SHA512 签名的数据时遇到问题。我已经阅读了文档,并且还在线查看了一系列示例,但是在实现之后,签名始终与 hmac hexdigest 不同。
拜托,我会对您的解决方案回复感到高兴。谢谢
这是我的代码:
import hashlib
import hmac
import json
def validate_signature(key: str, data: dict, signature: str) -> bool:
hmac_obj = hmac.new(
key=key.encode("utf-8"),
msg=json.dumps(data).encode("utf-8"),
digestmod=hashlib.sha512,
)
print("Signature: ", signature)
print("HMAC_OBJ: ", hmac_obj.hexdigest())
print("is_validate: ", hmac_obj.hexdigest() == signature)
return hmac_obj.hexdigest() == signature
我使用 我的密钥、要验证的数据以及与数据关联的签名调用该函数。
我得到了无与伦比的Signature和HMAC_OBJ。
我期待函数返回
True
,但它正在返回 False
。
您在使用 hmac 包验证 Python 中的 HMAC 签名时遇到了问题。
预期签名与 HMAC 签名之间出现差异的最常见原因是签名、密钥或输入数据的处理不一致。
请尝试以下代码来生成您的签名和验证:
import hashlib
import hmac
import json
def validate_signature(key: str, data: dict, signature: str) -> bool:
hmac_obj = hmac.new(
key=key.encode("utf-8"),
msg=json.dumps(data).encode("utf-8"),
digestmod=hashlib.sha512,
)
hmac_digest = hmac_obj.hexdigest()
print("Expected Signature:", signature)
print("Calculated HMAC Digest:", hmac_digest)
is_valid = hmac_digest == signature
print("Validation Result:", is_valid)
return is_valid
def generate_signature(key: str, data: dict) -> str:
hmac_obj = hmac.new(
key=key.encode("utf-8"),
msg=json.dumps(data).encode("utf-8"),
digestmod=hashlib.sha512,
)
return hmac_obj.hexdigest()
secret_key = "your_secret_key"
data = {"key": "value"} # Sample data
provided_signature = generate_signature(secret_key, data)
validate_signature(secret_key, data, provided_signature)