Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 043

Раздел: Delphi » Прочее
/ вопрос закрыт /

)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

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

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

bugmenot (статус: 3-ий класс), 22 февраля 2011, 20:20 [#5]:

Вообще, читать по ключевому слову "стеганография"
виконання програми розпочинається з того самого мiсця, де призупинилося.

27 марта 2011, 16:53: Вопрос закрыт (решение принял автор вопроса — Иванов Андрей): Мне не много помогло

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.03 сек.