Python 加密消息的脚本失败

Python script to encrypt a message fails

正在尝试通过为我的脚本提供密钥和消息来加密为 HMAC-SHA256。

我在网上看到的一个流行示例无法在我的机器上运行:

import hmac
import hashlib
import binascii

def create_sha256_signature(key, message):
    byte_key = binascii.unhexlify(key)
    message = message.encode()
    enc = hmac.new(byte_key, message, hashlib.sha256).hexdigest().upper()
    print (enc)

create_sha256_signature("KeepMySecret", "aaaaa")

为什么会出现此错误?

Traceback (most recent call last):
  File "encryption.py", line 12, in <module>
    create_sha256_signature("SaveMyScret", "aaaaa")
  File "encryption.py", line 8, in create_sha256_signature
    byte_key = binascii.unhexlify(key)
binascii.Error: Odd-length string

我应该如何更改我的代码才能提供我自己的短密钥?

当您调用 unhexlify 时,这意味着您的 key 是字节的十六进制表示形式。例如。 A73FB0FF...。在这种编码中,每个字符只代表 4 位,因此一个字节需要两个字符,整个输入字符串需要偶数个字符。

来自docs

hexstr must contain an even number of hexadecimal digits

但实际上给定的秘密“SaveMySecret”或“KeepMySecret”不仅有奇数个字符,而且甚至不是有效的十六进制代码,所以它无论如何都会失败:

binascii.Error: Non-hexadecimal digit found

您可以提供十六进制编码形式的密钥,或者不调用 unhexlify 而使用

byte_key = key.encode('utf-8')

获取字节作为 hmac.new()

的输入