Python无法纠正长度

时间:2017-01-18 05:23:43

标签: python python-2.7

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

此变量似乎长度为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]

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

1 个答案:

答案 0 :(得分:0)

您似乎在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

但它会成为不同的键!