Как зашифровать и расшифровать изображение с помощью DES, используя библиотеку pycrypto в python 3?

#python-3.x #image #encryption #pycrypto #des

#python-3.x #изображение #шифрование #pycrypto #des

Вопрос:

Это код, который я пробовал для шифрования и дешифрования текста:

 from Crypto.Cipher import DES
from Crypto import Random

def pad(text):
    while len(text) % 8 != 0:
        text  = " "
    return text

def removepad(text):
    reverse = text[::-1]
    for i in range(len(text)):
        if reverse[i] == ' ':
            pass
        else:
            break
    text = reverse[i:]
    text = text[::-1]
    return text

# plaintext = input("Enter Plaintext: ")
# key = input("Enter Key:")
plaintext = 'Encryption and Decryption of DES for OFB mode'
key = 'hellokey'
print("Plaintext: ",plaintext)
print("Key: ",key)
print()

iv = Random.new().read(DES.block_size)
cipher = DES.new(key, DES.MODE_OFB, iv)

plaintext = pad(plaintext)
msg = iv   cipher.encrypt(plaintext)
print("Encrypted Text: ")
print(msg)
print()

decCipher = DES.new(key, DES.MODE_OFB, msg[:DES.block_size])
msgback = decCipher.decrypt(msg[DES.block_size:])
dmsg = removepad(msgback.decode("utf-8"))
print("Decrypted Text: ")
print(dmsg)
 

Это вывод для приведенного выше кода:

Открытый текст: шифрование и дешифрование DES для ключа режима OFB: hellokey

Зашифрованный текст: b’xd5xc5$xdcxac=4*x91xfax8cx14xe7xbfxb8xd6ax99<xcax132x8dxa3Qxfdxdfx9cDQxd4xd4exc3xde»4x<xa0 x8d x11 x80 x97g: xdam x8a xdfl xcbaxu xbe’

Расшифрованный текст: шифрование и дешифрование DES для режима OFB

Комментарии:

1. И DES, и PyCrypto устарели и небезопасны. Поэтому вам следует использовать, например, AES и PyCryptodome (последний также поддерживает дополнение Crypto.Util.Padding модулем). Зашифрованные всегда байты, независимо от того, интерпретируются ли они как текст с использованием определенной кодировки или как формат изображения (например, jpg или bmp), не имеет значения для самого шифрования. Но изображение, вероятно, будет загружено из файла из-за объема данных, а зашифрованные данные будут храниться в файле.

Ответ №1:

Независимо от того, нужно ли вам использовать DES, DES.new(key, ...) ожидает байты key и cipher.encrypt(plaintext) ожидает байты plaintext , а не str единицы, поэтому используйте байтовые литералы key = b'hellokey' или кодируйте в байты msg = iv cipher.encrypt(plaintext.encode()) .