Skip to main content
 首页 » 编程设计

python之填充不正确。 AES Python 加密

2025年05月04日15grandyang

我正在尝试使用 python 进行简单的加密。

这是加密:

from Crypto.Cipher import AES 
from Crypto.Util.Padding import pad 
from Crypto.Util.Padding import unpad 
BLOCK_SIZE = 32 
 
def encrypt(message): 
    obj = AES.new(b'This is a key123', AES.MODE_CBC, b'This is an IV456') 
    return obj.encrypt(pad(message, BLOCK_SIZE)) 

加密似乎有效,因为它返回:

b'V=\t7I\x99\xa5\x06*\xa1={\x95+\xc1h\xfeY\xc2\xb5\xcf3F:\x88\xa6g\x94d\x87\xd7U' 

但是对于解密我使用:

def decrypt(ciphertext): 
    obj2 = AES.new(b'This is a key123', AES.MODE_CFB, b'This is an IV456') 
    return obj2.decrypt(unpad(ciphertext, BLOCK_SIZE)) 

但它显示:

Padding is incorrect

这是我要整理的整个文件:

import sys 
from Crypto.Cipher import AES 
import importlib 
try: 
    importlib.import_module('psutil') 
except ImportError: 
    import pip 
    pip.main(['install', 'psutil']) 
finally: 
    globals()['psutil'] = importlib.import_module('psutil') 
 
def collect_stats(): 
    try: 
        cpu = psutil.cpu_percent(interval=1) 
        memory = psutil.virtual_memory().percent 
        disk = psutil.disk_usage('/').percent 
        str_to_send_back = "{} {} {}".format(cpu, memory, disk) 
        str_to_send_back = str_to_send_back.encode() 
        str_to_send_back = encrypt(str_to_send_back) 
 
    except Exception as e: 
        print('Oops this error happened in collect_stats() inside client.py: ' + str(e)) 
 
 
def encrypt(message): 
    obj = AES.new(b'This is a key123', AES.MODE_CBC, b'This is an IV456') 
    return obj.encrypt(message) 
 
 
def decrypt(ciphertext): 
    obj2 = AES.new(b'This is a key123', AES.MODE_CFB, iv) 
    return obj2.decrypt(ciphertext) 
 
if __name__ == '__main__': 
    collect_stats() 

请您参考如下方法:

加密时先填充,再加密:

obj.encrypt(pad(message, BLOCK_SIZE)) 

这让我相信在解密时,你应该先解密,再解压。所以:

obj2.decrypt(unpad(ciphertext, BLOCK_SIZE)) 

会变成:

unpad(obj2.decrypt(ciphertext), BLOCK_SIZE)