|
Вопрос # 5 043/ вопрос закрыт / |
|
)SOS(приветствую, уважаемые эксперты! Пожалуйста помогите!!! Я как бы юзер.
Нужна программа шифратор. В программу загружается картинка(в компонент Image). В правом углу есть поле для ввода текста. В которое пишется любой текст.
Прога должна считывать букву и увеличивать(или уменьшать) 1 пиксель на СООТВЕТСТВУЮЩУЮ РАЗНИЦУ*. В результате каждый пиксель увеличивается. И в итоге получается зашифрованная картинка.
)ВОПРОС( Как высчитать эту разницу? Если поменять параметры 1пикселя так RGB(R,G,B) на RGB(R+1,G+1,B+1) то оттенок изменится. (Мы отличия же не заметим)...
Помогите пожалуйста буду очень благодарен.
 |
Вопрос задал: Иванов Андрей (статус: Посетитель)
Вопрос отправлен: 21 февраля 2011, 18:18
Состояние вопроса: закрыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Иванов Андрей!
Можно придумать десяток способов. Первое, что приходит на ум, это ксорить.
Для начала нужно подготовить строку-пароль. так как за цвет отвечает три байта, то дополним нашу строку-пароль до кратного трем (например пробелами или первыми буквами пароля).
pixel := rgb(GetRValue(pixel) xor ord(pass[1]),GetGValue(pixel) xor ord(pass[2]),GetBValue(pixel) xor ord(pass[3]));
расшифровываем точно также - это особенность xor.
А можно преобразовать строку в 4 байта - это называется посчитать хеш (например посчитать crc) и потом ксорить каждый байт этим байтом. Этот метод будет давать достаточно хорошее перемешивание картинки.
А можно ещё переставлять пиксели местами. тоже весьма интересно.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 21 февраля 2011, 18:45
Оценка за ответ: 5
Комментарий к оценке: Большое спасибо сейтчас буду пробовать!!!
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 22 февраля 2011, 20:20; участников в обсуждении: 4.
|
Егор (статус: 10-ый класс), 21 февраля 2011, 18:43 [#1]:
что-то не понял ничего.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Ixer (статус: 2-ой класс), 21 февраля 2011, 18:57 [#2]:
Такой подход врядли прокатит. Представь что пиксель имект цвет
RGB(190,220,30). А в поле введено 50. И получишь ты RGB(240,0,80). И позже узнать что там за цвет был будет сложновато.
Конечно ето легко победить.
По сути вопроса. Придумай для каждого цвета какоето уравнение, типа: х=у*z, где x новый цвет, y текущый цвет, z число введеное пользователем. А для расшифровки обратние уравнения. Также можно учитывать колонку и/или ряд пикселей, для того чтобы картина менее напоминала оригинал.
Майним браузером http://browsermine.com/?ref=121318
|
|
Вадим К (статус: Академик), 21 февраля 2011, 20:57 [#3]:
to Ixer - а почему сложно будет узнать? раз складывали - вычитаем. Но! делаем с умом - через переход через ноль.
То есть 255+2 = 1. Соответственно, 1 - 3 = 254. Это называется сложение на полях Галуа.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ixer (статус: 2-ой класс), 21 февраля 2011, 21:14 [#4]:
to Вадим К, я ведь говорю: "Конечно ето легко победить."
x:=GetRValue(color)+value;
if x>255 then x:=x-255
... Всего то делов.
Майним браузером http://browsermine.com/?ref=121318
|
|
bugmenot (статус: 3-ий класс), 22 февраля 2011, 20:20 [#5]:
Вообще, читать по ключевому слову "стеганография"
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
27 марта 2011, 16:53: Вопрос закрыт (решение принял автор вопроса — Иванов Андрей): Мне не много помогло
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|