| 
| 
 | Вопрос # 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: Вопрос закрыт (решение принял автор вопроса — Иванов Андрей): Мне не много помогло Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |