尝试使用 Python HMAC 库验证消息

问题描述 投票:0回答:1

请,我在使用 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

我使用 我的密钥要验证的数据以及与数据关联的签名调用该函数。

我得到了无与伦比的SignatureHMAC_OBJ

我期待函数返回

True
,但它正在返回
False

python encryption hash hmac sha512
1个回答
0
投票

您在使用 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)
© www.soinside.com 2019 - 2024. All rights reserved.