Привет всем, у меня небольшая проблема с кодом Python AES Decryption, который я написал. Я пытаюсь расшифровать два разных письма (разной длины) с использованием шифрования PyCryptoDome и AES-256-CBC. Мой код ниже:
import base64
from Crypto.Cipher import AES
import json
from Crypto.Util.Padding import pad, unpad
def decrypt(enc):
# Get key
key = base64.b64decode("mybase64key")
# Load dictionary of Base64 values of the payload to decrypt
dataDict = json.loads(base64.b64decode(myEncryptedData))
# Create decrypter with our IV
decrypter = AES.new(key, AES.MODE_CBC, base64.b64decode(dataDict['iv']))
# Pad and decode data
data = decrypter.decrypt(pad(base64.b64decode(dataDict['value']), 16))
# EDIT: PRINTING DATA HERE
print(data)
# Works for shorter password
print(data[:-24].decode())
# Works for longer password
print(data.decode())
Кажется, это просто проблема заполнения, но я не уверен, как получить правильный размер заполнения. Оба пароля / IV имеют одинаковую точную зашифрованную длину, поэтому
print(len(dataDict['value']))
печатает 44 для обоих электронных писем, и заполнение печатает 48 для обоих электронных писем, что мешает мне получить длину дополнения, так как она одинакова во всех случаях.
Использование
print(len(data))
возвращает одинаковое значение длины для обоих электронных писем. Однако, когда я просто распечатываю данные, я вижу два электронных письма, например:
b'abcdefghijklmnop@gmail.com\x06\x06\x06\x06\x06\x06\x0f\xef\xe2\xa3\xdd\xH9\x7f\xj4\xwf\x14\x88\xd8(x\x90N'
b'abcd.efghi@myydomain.com\x08\x08\x08\x08\x08\x08\x08\x08y\xg3?\xa0\x1e\xaa`\xc2\x67\xf1i]3\xe1\xa0F'
Как мне получить строку, которую я вижу в массиве байтов, не зная длины исходного текста? Есть ли обходной путь? Два предоставленных мной примера байтовых массивов имеют одинаковую длину / формат писем, но я не знаю, как решить эту проблему.