在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]
这消除了所有不可打印的字符,并且在测试中证明它等于预期值。
答案 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
但它会成为不同的键!