用于加密消息的 Python 脚本失败

问题描述

尝试通过给我的脚本一个密钥和消息来加密到 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 必须包含偶数个十六进制数字

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

binascii.Error: 发现非十六进制数字

您可以提供十六进制编码形式的密钥,或者使用类似的东西来代替调用 unhexlify

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

获取字节作为 hmac.new() 的输入