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()
的输入
正在尝试通过为我的脚本提供密钥和消息来加密为 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()