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