|
345 / 56 / 4
Регистрация: 27.04.2009
Сообщений: 36
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Стеганография в BMP. Полное руководство11.03.2010, 21:54. Показов 206270. Ответов 64
Метки нет (Все метки)
СТЕГАНОГРАФИЯ в BMP ИЗОБРАЖЕНИЯХ Данная статья содержит готовый проект с подробным описанием алгоритма реализации шифрования текстового сообщения в графический файл формата *.BMP I. Теоретические предпосылки, или что нужно знать для начала работы . . . Пиксел изображения в 24-х битном .BMP формате занимает 3 Байта (24 бита) памяти (соответственно по 1 байту на каждый канал - Red, Green, Blue (RGB)) Один символ текста занимает 1 Байт (8 бит) дискового пространства. Если заменять Байт изображения Байтом текста, то мы получим обсалютно другой цвет пиксела, и, как следствие, сильное искажение изображения. Поэтому наиболее удобно заменять только 1 бит одного из каналов Пиксела на 1 бит Текста. Такая подмена будет незаметна для человеческого глаза. (При желании можно заменять последний бит КАЖДОГО из каналов... Алгоритм изменится незначительно). Таким образом, один символ текста будет кодироваться в 8 пикселов изображения. Разумно задать следующий вопрос: "а какой бит заменять то?" Рассмотрим пример: Возьмем пиксел со значениями кодируемого канала: Red = 255; BYTE R = 255; // 11111111 Предположим нам нужно заменить один бит этого канала на бит символа, равный '0'. Если мы заменим первый бит Байта R, то получим: BYTE R = 11111110; // теперь R = 127 (отсчет идет справа налево, а не слева направо!!! Вожно это знать!) - согласитесь, разница значений очень велика! Теперь попробуем заменить последний бит Пиксела: BYTE R = 01111111; // теперь R = 254 т.о. оттенок цвета изменится незначительно. Итак, решено - МЕНЯЕМ ПОСЛЕДНИЙ БИТ ПИКСЕЛА. II. АЛГОРИТМ РАБОТЫ ПРОГРАММЫ . . . ШИФРОВАНИЕ 1. Загружаем изображение 2. Определяем колличество пикселов, из которого оно состоит 3. Делим полученное значение на 8 и получаем максимальный размер текстового сообщения 3. Вводим шифуемый текст 4. Определяем размер текста и сопоставляем его с максимально допустимым 6. Определяем шаг продвижения по Битмапу 5. Организуем два цикла: - Внешний: обход по символам - Внутренний: обход по битам символа 6. В циклах заменяем биты изображения битами текста, двигаясь по изображению с заданным шагом 7. Сохраняем полученный результат 8. Записываем в файл "ключ", который позволит расшифровать сообщение ! Ключ содержит две переменных: ШАГ и РАЗМЕР ТЕКСТА ДЕШИФРОВКА 1. Загружаем изображение 2. Загружаем ключ 3. Организуем два цикла: - Внешний: обход по символам - Внутренний: обход по битам символа 4. В циклах считываем с шагом, указанным в ключе, значения последних битов пикселов; Группируем биты в символы и формируем из символов Текстовую строку III. РЕАЛИЗАЦИЯ . . . 1. Объявим глобальные переменные, которые позволят нам продолжить работу:
3. Подготавливаем изображение для работы и определяем дополнительные переменные:
Для этого я использовал компонент TRichEdit. Создаем свойство OnChange и пишем туда приблизительно такой код:
5. Шифруем сообщение :
6. Сохраняем полученное изображение и ключ в файлы:
Теперь ДЕШИФРОВКА: ... как открыть файл мы теперь знаем ... 1. Считываем коюч:
Удачи в ваших начинаньях!!!
35
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 11.03.2010, 21:54 | |
|
Ответы с готовыми решениями:
64
Стеганография в BMP Стеганография LSB BMP |
|
345 / 56 / 4
Регистрация: 27.04.2009
Сообщений: 36
|
|
| 12.03.2010, 07:50 [ТС] | |
Сообщение было отмечено RefSol как решение
Решение
Вот выложил исходники. . .
! И еще одно замечание - BMP-файл можно представить в виде вектора, размерностью [width*height*3] что упростит продвижение по изображению и сделает ненужной функцию GetPixel. Но учтите, перевод BMP файла в вектор потребует определенные затраты времени. . .
8
|
|
|
|
|
| 12.03.2010, 14:15 | |
|
Вот тут у нас поднялся вопрос о том, как засунуть информацию в *.jpg. Ибо передача файла *.bmp уже наводит на мысль о том, что там что-то спрятано. Поэтому кодирование информации в изображения с форматами бес сжатия - не есть интересно. Ты владеешь вопросом в части *.jpg?
3
|
|
|
13 / 13 / 1
Регистрация: 21.02.2010
Сообщений: 45
|
|
| 01.06.2010, 21:25 | |
|
вот такой вопрос а можно в этой проге ключ убрать?????
0
|
|
|
13 / 13 / 1
Регистрация: 21.02.2010
Сообщений: 45
|
|
| 01.06.2010, 21:39 | |
|
ну в нутри есть программа она использует ключ для шифрации а можно как нить без него просто изображение сохраять!!????????
0
|
|
|
13 / 13 / 1
Регистрация: 21.02.2010
Сообщений: 45
|
|
| 01.06.2010, 21:51 | |
|
мне нужно просто шифровать текст в изображение BMP но без ключа ......
Добавлено через 55 секунд текст нужно зашифровать в BMP... как я примерно понял нужно разбить картинку на куски (по 8 пикселей) и в одном таком куске будет храниться 1 буква через двоичный код (тиипа 00010101)... Добавлено через 2 минуты а при зашифровке и расшифровке чтобы не выскакивал сохранить и заагрузить ключ а что бы он просто сразу загружал изображение и расшифровывал то что есть в изображении......т.е.текст!!!!!!!
0
|
|
|
|
|
| 01.06.2010, 22:36 | |
|
Я так понимаю, что тебе нужно исходники вот этой программы? Ну дык попроси автора да и всё. В этой теме тоже исходник лежит - бери его, да убирай ключ. Автор тут, можешь его спросить если что. Или ты не хочешь сам ничего делать, а тебе нужно всё готовенькое?
0
|
|
|
13 / 13 / 1
Регистрация: 21.02.2010
Сообщений: 45
|
|
| 01.06.2010, 23:23 | |
|
мне очень нужна вот эта программа Program.rar !!!!только без ключа!!! я уже чача три колыпаюсь и не могу убрать ключ!!!!
Добавлено через 33 секунды не могли бы вы помоч??зарание большое спасибо!!!
0
|
|
|
345 / 56 / 4
Регистрация: 27.04.2009
Сообщений: 36
|
|
| 02.06.2010, 09:33 [ТС] | |
|
Чувак, я б с радостью помог, но времени нет - сессия у меня... если не срочно то в июле помогу.... а щас никак....
0
|
|
|
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 2
|
|
| 02.06.2010, 22:54 | |
|
Вопрос к автору проги (ну или кто разбираеться другой) какие конкртено функции отвечают за замену битов картинки ? Где что нужно поменять чтоб например записывалось не в последний бит, а в первый (ну вот надо мне так
) Я сам покопался, но пока не нашёл...
0
|
|
|
345 / 56 / 4
Регистрация: 27.04.2009
Сообщений: 36
|
||
| 03.06.2010, 16:19 [ТС] | ||
|
опять же говорю - времени пока вообще нет, так что экспериментируйте )))
1
|
||
|
0 / 0 / 4
Регистрация: 04.10.2010
Сообщений: 115
|
|
| 04.10.2010, 11:17 | |
|
а как быть с GIFом???
Добавлено через 2 минуты в инете об этом маловато....(
0
|
|
|
345 / 56 / 4
Регистрация: 27.04.2009
Сообщений: 36
|
|
| 04.10.2010, 16:50 [ТС] | |
|
что касается GIFа - не знаю...
а вот с PNG легко можно... принцип во всяком случае тот же... Основное правило - использовать формат без потери качества. В форматах с потерей используются алгоритмы сжатия, и такой фокус с заменой последнего бита не пройдет. Во всяком случае эти изменения достаточно легко обнаружить всвязи со спецификой формата
0
|
|
|
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
|
|
| 17.10.2010, 07:14 | |
|
у меня вот несколько вопросов:
1) для чего ключ автор использовал из двух частей? 2) у png 4 канала (RGBA)? и если да то как обрабатывать Alpha? 3) вот никак немогу узнать GIF с потерей качества или нет? 4) и вот думаю, если подменять не последний бит, а последний и предпоследний сильно ли это будет заметно (когда меняем последний то разница в цвете 2^3 а когда 2 последних то 4^3 так?) я написал "стенограф" на C++Builder 6 с чтением png, gif, jpeg, bmp и сохранение bmp, png ключ я записываю в начало текста "123|" где 123 сколько символов читать
0
|
|
|
345 / 56 / 4
Регистрация: 27.04.2009
Сообщений: 36
|
|||||
| 17.10.2010, 08:34 [ТС] | |||||
|
ОТВЕЧАЮ НА ВОПРОСЫ:
P.S. Глянул вашу программку. . . Очень интересно бы исходники посмотреть, если это не коммрческий проект конечно ))) я написал "стенограф" на C++Builder 6 с чтением png, gif, jpeg, bmp и сохранение bmp, png ключ я записываю в начало текста "123|" где 123 сколько символов читать
1
|
|||||
|
1 / 1 / 0
Регистрация: 29.10.2010
Сообщений: 3
|
||||||||||||||||||
| 29.10.2010, 22:24 | ||||||||||||||||||
|
Хмм интересненько, попробывал скомпилить, получаю:
Добавлено через 1 час 39 минут Решил свою проблему, правильная строчка выглядит так:
1
|
||||||||||||||||||
|
1 / 1 / 0
Регистрация: 29.10.2010
Сообщений: 3
|
|||||||||||
| 31.10.2010, 12:19 | |||||||||||
|
Еще один нюанс
В файле OpenKey.cpp ищем строчку
0
|
|||||||||||
|
345 / 56 / 4
Регистрация: 27.04.2009
Сообщений: 36
|
|
| 31.10.2010, 13:02 [ТС] | |
|
Да, проблемы с c_str() и t_str() имеет место быть в различных версиях Builder...
Поэтому будет ли ошибка или ее не будет вовсе зависит от того, в каком Билдере вы компилируете проект...
0
|
|
| 31.10.2010, 13:02 | |
|
Помогаю со студенческими работами здесь
20
Полное руководство (книги, видео и т.д.) Методы GetPixel\SetPixel BMP и стеганография Отличия между книгами Г.Шилдт - C# 3.0 Полное руководство и C# 4.0 PHP 5. Наиболее полное руководство в подлиннике (2-е издание) Г.Шилдт C# 4.0. Полное руководство. Разбор примера работы с массивом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|