Заполнение неверно. AES Python шифрование

Я пытаюсь собрать простое шифрование с использованием 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))

Но это показывает:

Заполнение неверно

Это весь файл, который я пытаюсь собрать:

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()

1 ответ

Решение

При шифровании вы выполняете заполнение, а затем шифрование:

obj.encrypt(pad(message, BLOCK_SIZE))

Это заставит меня поверить, что при расшифровке вы должны сначала расшифровать, а потом распаковать. Так:

obj2.decrypt(unpad(ciphertext, BLOCK_SIZE))

станет:

unpad(obj2.decrypt(ciphertext), BLOCK_SIZE)
Другие вопросы по тегам