LINUX.ORG.RU

Не могу правильно разработать алгоритм

 ,


2

1

Добрый вечер. В экспериментальных целях хочу сделать следующий алгоритм (на питоне если что).

Есть изображение и некий ключ (произвольная строка). Задача в том чтобы каким-то образом превратить изображение по ключу в визуальный мусор и затем, соответственно по этому же ключу, вернуть его в первозданный вид. Какие варианты можно придумать? Копать в сторону перемещения пикселей или может работать с цветами пикселей? Хотелось бы услышать здравые идеи.

★★

Последнее исправление: Andreezy (всего исправлений: 1)

Шифровать, как и было сказано. Любым шифром.

Извлечь данные из пнг-картинки можно так: convert вход.пнг rgb:выход.бин

Засунуть в пнг данные: convert -depth 8 -size $szxy rgb:вход.бин выход.пнг

Размер $szxy (например 27x13) нужно заранее просчитать, и данные нужно дополнить до нужной длины (padding).

Тред не читал.

corona
()

ТС ты определился что тебе нужно на самом деле?

HIS
()
Ответ на: комментарий от peregrine

Где было сказано про QR?

Куда прятать за кадром?

Ты о чём?

HIS
()
Ответ на: комментарий от anonymous

очевидно же, что он пишет малварь, которая зашифрует юзеру файлы и будет просить бабос за расшифровку:

Ну приплыли. Малварь на питоне

Вот то что я хотел уже написали. Я просто забыл про random.seed() и пытался что-то накостылить сам. А так решение то что нужно

from PIL import Image
import numpy
import random

image = numpy.asarray(Image.open('ava.png'))
noise = numpy.copy(image)
random.seed(100500)  # псевдоключ
with numpy.nditer(noise, op_flags=['readwrite']) as it:
    for x in it:
        x[...] = random.randint(0, 255)
noise_image = Image.fromarray(noise)
noise_image.save('noise.png')
pseudo_crypt = numpy.bitwise_xor(image, noise)
pseudo_crypt_image = Image.fromarray(pseudo_crypt)
pseudo_crypt_image.save('result.png')
decrypted = pseudo_crypt = numpy.bitwise_xor(pseudo_crypt, noise)
decrypted_image = Image.fromarray(decrypted)
decrypted_image.save('decrypted.png')

Но минус только в том, что не поддерживает JPEG. Отсюда и продолжение

Andreezy ★★
() автор топика
Последнее исправление: Andreezy (всего исправлений: 1)

Какие варианты можно придумать?

Наверяка кто-то предложил, но. Разбиваешь на цветовые компоненты по байту на каждый - получаешь массив байтов, его ксоришь с ключом по кругу.

ya-betmen ★★★★★
()
Ответ на: комментарий от Andreezy

Но минус только в том, что не поддерживает JPEG

В Jpeg, если без потери качества исходного Jpeg-a - только заменой параметров частот в контейнере. Мусор будет :). Сложность в том, что нужно разбираться в устройстве контейнера.

HIS
()
Ответ на: комментарий от HIS

не нужно.

Дырка ты от бублика. Решение по Jpeg и на C и на Python я уже давным-давно выдал. А ты, тряпка, всё сопли жуёшь.

anonymous
()
Ответ на: комментарий от HIS

ТС долго соображает.

Нет. ТС просто (в отличии от тебя) меня не видит. Ты же такую пургу ему в уши понапхал, что он в принципе никакого решения увидеть не может. Вот такое у тебя «на пальцах», маэстро хренов.

anonymous
()

Мне тут один анонимус достал.

Он намекнул мне, что ты отрубил анонимусов и не видишь его посылку.

Я не знаю в чём его трабла войти сюда как человек, но есть от него посылка про Jpeg-и.

По идее это то что тебе нужно: https://github.com/dwgoon/jpegio

HIS
()
Ответ на: комментарий от anonymous

даже если он поменяет 1 бит - то вполне возможно не распакует, то что было пожато хаффманом.

всё зависит от того, куда этот бит приземлится. т.к. не все коды одной и той же длинны заняты.

несколько ситуаций. пусть поменялся всего 1 бит во всём уже пожатом кодом хаффмана. код символа:

  1. может стать невалидным впринципе.

  2. может поменяться на существующий код, той же длины - тогда прокатит.

  3. в результате изменения бита в символе, код поменятся, притом поменяется так сильно, что внезапно станет частью другого кода. вот тут тогда всё похерится опять, капитально.

т.е. единственный вариант безболезненной замены битов - это считывать код каждого отдельного символа и менять его на другой, но существующий код. т.е. перестановочной шифр, только из кодов хаффмана.

n_play
()
Ответ на: комментарий от n_play

поменялся всего 1 бит во всём уже пожатом кодом хаффмана.

Зачем ты пытаешься менять упакованные биты?

anonymous
()
Ответ на: комментарий от HIS

объясняю моя идея была в том чтобы картинку саму исказить чтоб нельзя было понять что на ней. Потом сверху в центре разместить qr код со ссылкой и выдать пароль тому кто загрузил картинку потом кому надо отсканит qr-код и перейдет по ссылке и если правильно введет пароль то получит искомую картинку.

Но php отказывается работать с google charts которая по get-запросу создает картинку с кодом. Можно сделать на python2.

XoFfiCEr ★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.