Python无法更正长度

2024-10-02 20:44:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python脚本中,我有一个变量key,由值为key = F9hygcyyB2h1S0+2urrsHknqqGPx693s的AES解密算法输出。你知道吗

此变量的长度似乎为32个字符。但是,运行len(key)返回48。为什么会这样?你知道吗

key
len(key) = 48
type(key) = <type 'str'>, Unicode? False
print (key) = None.
str(key) = F9hygcyyB2h1S0+2urrsHknqqGPx693s
repr(key) = 'F9hygcyyB2h1S0+2urrsHknqqGPx693s\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10'

key = key.encode('ascii', 'ignore')
Length: 48. Type: <type 'str'>, Unicode? False

key = unicode(key)
Length: 48. Type: <type 'unicode'>, Unicode? True

key = key.decode('utf-8')
Length: 48. Type: <type 'unicode'>, Unicode? True

答案

key变量是AES.new(key, AES.MODE_CBC, iv)解码过程的输出,我相信repr(key)中显示的不可打印字符实际上是填充。因为我知道密钥的长度应该是32个字符,所以只需添加:

key = key[0:32]

这样就消除了所有不可打印的字符,并且在测试中证明它等于预期的值。你知道吗


Tags: keyfalsetruelentypeunicodelengthaes
1条回答
网友
1楼 · 发布于 2024-10-02 20:44:12

看起来在key中有一些不可打印的字符。您可以轻松摆脱它们:

newkey = ''.join(x for x in key if x.isprintable()) # Python 3
newkey = ''.join(x for x in key if x in string.printable) # Python 2
len(newkey)
# 32

但这将是一个不同的钥匙!你知道吗

相关问题 更多 >