@bcubak

Как зашифровать картинку в AES и получить на выходе картинку с хаотичными пикселями?

Суть задачи:
Нужно зашифровать картинку в AES и обратно получить хаотичный набор пикселей.

Как делаю я:
Читаю картинку по байтам и записываю в txt файл, кодирую этот файл и записываю зашифрованные байты в картинку, но при запуске картинки пишет:"Недопустимое разрешение"

код:

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

def read():
fileFirst = input('Введите название файла: ')
with open(fileFirst, 'rb') as byteImg:
byte_text = byteImg.read()
with open('byte_img_text.txt','wb') as re:
re.write(byte_text)
print(byte_text)

def encrypt():
key = get_random_bytes(16)
with open('byte_img_text.txt', 'rb') as txtToEntxt:
TextForEncrypt = txtToEntxt.read()
cipher = AES.new(key, AES.MODE_CTR)
byte_text_en = cipher.encrypt(TextForEncrypt)
with open('byte_img_text_en.txt', 'wb') as newF:
newF.write(byte_text_en)

def write():
with open('byte_img_text_en.txt', 'rb') as reWrite:
text = reWrite.read()
with open('end.jpg', 'wb') as wrWrite:
wrWrite.write(text)
print(text)

#read()

#encrypt()
write()
  • Вопрос задан
  • 1019 просмотров
Пригласить эксперта
Ответы на вопрос 4
@pfg21
ex-турист
хорошие задачи студентам однако подкидывают. преподу респект - студентам думать и изучать.
исходим из предположения что png не сжат.
открываем исходный png через соотвествующую библиотечку. создаем целевой png.
далее берем цвета первого пикселя исходного png - шифруем - записываем в цвета первого пикселя целевого файла.
и так до конца.
закрываем png.
получаем правильный по формату png где цвета каждого пикселя зашифрованы.
и также в обратку.
алгоритм конечно писан вилами по воде :) но и тебе, студент, учитца надо.
Ответ написан
@HLudens
Собственно правильно тебе система пишет :)
Файл картинки кроме данных о цвете пикселей имеет еще и кучу данных описанных форматом, т.е. хранит внутри себя высоту, ширину, способ сжатия, дополнительную информацию вроде кординат съемки и названия фотоапарата...
т.е. зашифровав весь файл ты сделал эти данные нечитаемыми.
как проблему решить: первый вариант тебе описали, побайтно зашифровать ТОЛЬКО область пикселей.
Второй вариант- создаешь новый файл, пишешь туда заголовок для пнг со всеми нужными полями, а дальше зашифрованный целиком свой файл.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Шифровать надо канву, а не структуру...
Ппц..
Ответ написан
Комментировать
@towin
Проще всего сделать это с BMP файлом, у него простая структура заголовка, данные не сжимаются.
Шифровать нужно данные отдельно от заголовка. На выходе будет нормальная картинка, только вместо изображения - мусор из пикселей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы