加密消息的Python脚本失败

加密消息的Python脚本失败,python,python-3.x,encryption,hmac,Python,Python 3.x,Encryption,Hmac,试图通过为脚本提供密钥和消息来加密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, h

试图通过为脚本提供密钥和消息来加密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
回溯(最近一次呼叫最后一次):
文件“encryption.py”,第12行,在
创建签名(“SaveMyScret”、“aaaaa”)
文件“encryption.py”,第8行,在create_sha256_签名中
byte_key=binascii.unhexlify(key)
错误:奇数长度字符串

我应该如何更改代码,以便能够提供自己的短键?

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

从:

hexstr必须包含偶数个十六进制数字

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

binascii.错误:找到非十六进制数字

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

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

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

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

从:

hexstr必须包含偶数个十六进制数字

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

binascii.错误:找到非十六进制数字

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

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

要获取字节作为
hmac.new()

的输入,这是可行的,但现在输出都是大写的。我希望它通常是小写的。。不想使用lower()函数。
.upper()
将其改为大写,所以只需删除它。没有注意到upper()。谢谢!这是可行的,但现在输出都是大写的。我希望它通常是小写的。。不想使用lower()函数。
.upper()
将其改为大写,所以只需删除它。没有注意到upper()。谢谢!