Пытаясь понять методы AES Python - PullRequest
0 голосов
/ 15 октября 2019

Я хотел бы, используя Python3 Crypto.Cipher, чтобы использовать AES в режиме CTR. Проблема в том, что у меня есть массив двоичных цифр («0/1» в строковом формате), и я хочу зашифровать / расшифровать их с помощью AES-CTR. После просмотра этой статьи я попытался разработать код, который добавлен ниже.

from Crypto.Cipher import AES
import os
import sys

secret = os.urandom(16)
crypto = AES.new(os.urandom(32), AES.MODE_CTR, counter=lambda: secret)

msg = "Hello World"

#string-->bytes
bytes_msg = str.encode(msg)
print(msg + " > 2bytes > " + str(bytes_msg))

#bytes-->encrypt
encrypted_bytes_msg = crypto.encrypt(bytes_msg)
print(" > encryption > " + str(encrypted_bytes_msg))

#encrypt-->decrypt
decrypted_bytes_msg = crypto.decrypt(encrypted_bytes_msg)
print(" > decryption > " + str(decrypted_bytes_msg))

#bytes-->string
#decrypted_msg = decrypted_bytes_msg.decode() # <= !ERROR HERE!
#print(" > msg > " + decrypted_msg)

Я ожидал, что увидит что-то вроде следующего:

Hello World> 2 байта> "b'Hello World"> шифрование> # JibberishText #> расшифровка> b'Hello World '> Hello World

Фактические результаты этого прогона:

Hello World> 2 байта> b'Hello World '> шифрование> b' \ x8eo \ xfc` \ xeck \ xcf \ r4 \ x1fS '> расшифровка> b' \ xc7 \ x93 \ x8a \ x1dK \ xad\ xc5 \ x9d8 \ x9c \ x18 '

Также : если я не закомментирую последние строки, я получаю следующую ошибку:

File "aes25способ использования модуля?

1 Ответ

0 голосов
/ 15 октября 2019

Вы должны быть очень осторожны, используя примитивы, представленные этим модулем, очень легко сделать что-то не так и полностью сломать криптосистему

Ваш код как есть, не работает для меня, потому что *Параметр 1003 *counter должен быть Crypto.Util.Counter, а не функцией. по-видимому, это работает с некоторыми версиями библиотеки, но не работает для меня.

, который сказал, что ваш код никогда не будет работать, потому что вам нужно «переустановить» шифр между шифрованием и дешифрованием, чтобыдля этих операций используются одинаковые значения счетчиков. второй https://stackoverflow.com/a/45642256/1358308 ответ на этот вопрос имеет гораздо лучший пример использования модуля

...