Python:AES.MODE_CFB 解码问题/获取初始输入

问题描述

我正在尝试使用 Python 中的 Crypto.Cipher 库对字节字符串进行编码和解码。加密代码为:

message = b'Hello world How are you Have a great day' 
key = pad(b'Hello world',16)
iv = os.urandom(16)                   
encryptor = AES.new(key,AES.MODE_CFB)  
cipher_text = encryptor.encrypt(message)
print(cipher_text)

我得到的输出

b'x\xc1\x8a&\x07c\x98\xdbl@$\xde\xfeG\x80\x00\xb6\xfd\x17\x9d\xb1R\xdd\xcf1\n\xb5\xe6I\x11\xe0\x96\x08E\x11\xa8^\xbf\x1el'

但是,当我解密回消息时,我希望得到相同的消息 b'Hello world How are you Have a great day'。但是,我没有。解密代码为:

decryptor = AES.new(key,AES.MODE_CFB,iv=iv)  
msg = decryptor.decrypt(cipher_text)
print(msg)

我得到的输出

b'[\xa0\xfd\xab>T\x90)\xd5\xf3\x8a\xbb\xe0;\xff\xdaare you Have a great day'

我试图应用 decode() 函数,但它似乎不起作用。有人可以给出提示或方向吗?谢谢。

解决方法

显式生成的 IV library(stringr) str_remove_all(sample_names,str_c(c(pattern1,pattern2,pattern3),collapse="|")) 仅在解密期间使用,而不在加密期间使用。因此,在加密过程中隐式生成了不同的 IV,从而使加密和解密过程中的 IV 不同。修复:

iv

另外,不要使用(填充的)密码作为密钥。为此,有基于密码的密钥派生函数。