Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/27: Рейтинг темы: голосов - 27, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 9

Шифрование изображения по цвету пиксела

24.02.2012, 12:56. Показов 5340. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Боооольшая просьба помочь в такой специфической задаче:
Задача: зашифровать изображение изменяя цвет каждого пиксела используя для способ RSA.
Проблема в том что интенсивность пиксела изменяеться от 0 до 255. При шифровании с RSA при использовании больших чисел ключа P и Q получаються числа большие чем 255, то есть при интенисвности пиксела например 210 на выходе шифроалгоритма можеть быть число 928. B как теперь нарисовать пиксел с итенсивностью 928 совершенно непонятно. Привожу пример кода с получением интенсивности цвета пиксела(в даном случае ограничимся монохромным изображеним). В качестве заглушки шифроалгоритма использовал просто XOR c генератором случаных чисел от 0 до 255. Но как при реализации с RSA получить числа от 0 до 255 ума не приложу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm8::Button2Click(TObject *Sender)
{
bmp1->PixelFormat = pf24bit;
bmp2->PixelFormat = pf24bit;
 int IntOut, color;
    int *ptr;
 AnsiString Intens;
 
    for (int y = 0; y< bmp1->Height; y++){
        ptr =  (int *)bmp1->ScanLine[y];
        for (int x = 0; x < bmp1->Width; x++){
            //color = ptr[x];
            Intens = IntToStr(GetRValue(ptr[x]));
            IntOut = (GetRValue(ptr[x]))^random(256);
 
         bmp2->Canvas->Pixels[y][x]=(TColor)RGB(IntOut, IntOut, IntOut);
 
        }
    }
    Image2->Canvas->Draw(0,0,bmp2);
}
То есть надо на форме получить исходное и шифрованое изображение.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.02.2012, 12:56
Ответы с готовыми решениями:

Получение координат пиксела с изображения
Добрый день! Я начинающий разработчик. Помогите, пожалуйста, решить задачу. Суть такова: На форме открывается изображение....

Получение цвета пиксела загруженного изображения
Как можно открыть картинку в QBasic?Если это возможно, то как узнать в какой цвет окрашен определенный пиксель на этой картинке?)

Цвет отдельного пиксела изображения Graphics2D?
Как получить цвет отдельного пиксела изображения Рисую на Graphics2D.

13
60 / 21 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 13:16
Если множество значений шире множества определений, то только с потерей информации.

Ты можешь поставить % 256 и получить значения от 0 до 255, но тогда восстановить 928 уже не сможешь.

Какова цель задачи? Передать секретные данные по открытым каналам? Если нужно просто обратимо сжать, то гораздо лучше подойдет код Хаффмана или любой другой стандартный алгоритм.
0
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 9
24.02.2012, 13:31  [ТС]
Это задание на курсак "Шифрование изображений по схеме RSA". В том то и дело что если больше 255 то восстановить невозможно, либо пиксели с такой интенисвностью вставлять как есть в шифрованую картинку. Выглядеть должно примерно так:
Миниатюры
Шифрование изображения по цвету пиксела  
0
60 / 21 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 14:34
Пиксели, как есть, ты не вставишь, поскольку 928 не влезет в 1 байт.

Если это Д/З, наверное криптостойкость не сильно важна. Выбери p и q равными 23 и 11 или 19 и 13.
0
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 9
24.02.2012, 15:02  [ТС]
Тоже так думал, но при например 19 и 13 не охватывает весь дипазон от 0 до 255 где то от 245 до 255 уже неправильно дешифрует. Ну разве что это диапазон оставлять как есть без шифровки. Если бы зашифровать RC4 без проблем бы получилось. Интересно если зашифровать и записать в файл *.bmp масив этих чисел наверное при открытии бред получится.
0
60 / 21 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 15:20
Оставлять незашифрованными коды от 245 до 255 вполне себе идея. Я бы так оставил. Правда, на тестовой картинке с большим количеством белого фона это вылезет.
1
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 9
24.02.2012, 15:59  [ТС]
наверное так и прийдётся, без вариантов, прийдётся тестовое изображение подобрать
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
24.02.2012, 16:12
Цитата Сообщение от olexij Посмотреть сообщение
в даном случае ограничимся монохромным изображеним
А вот если бы не ограничились, то вместо 256 значений получили бы 16.7 миллиона. И вот чисто ради интереса два вопроса:
- почему взят только красный компонент?
- какое практическое применение такого шифрования?
0
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 9
24.02.2012, 16:20  [ТС]
1. Красный потому как для упрощения будем считать изображение greyscale, ну можна взять все три цвета(в монохромном все три градации одинаковые) и поделить на 3, будет тоже самое.
2. Практическое незнаю какое(просто задание на курсак).
если кому интересно, немного теории (на украинском, но думаю можно понять).
Вложения
Тип файла: pdf Koval.pdf (1.56 Мб, 78 просмотров)
0
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 9
24.02.2012, 17:14  [ТС]
Хотя можна конечно и 16,7 млн тогда в RSA надо чтоб p*q > 16,7 млн.

Добавлено через 44 минуты
Дали некоторую подсказку: поскольку шифрованые числа могут быть больше 255 надо преобразовать его так как для вывода цветного изображения.
0
60 / 21 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 17:43
Логично. Из ч/б картинки получаем цветной шум. В приведенной тобой фотографии так и есть.
0
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 9
24.02.2012, 18:03  [ТС]
осталось дело за малым преобразовать интенсивность ч/б пиксела в RGB
0
60 / 21 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 18:10
Ну как. Берем число 4 байт с интесивностью и раскладваем на три байта:
C++
1
2
3
4
5
6
int luma = ...
char rgb[3] = {0};
 
rgb[0] = luma & 0xFF;
rgb[1] = (luma >>  8) & 0xFF;
rgb[2] = (luma >> 16) & 0xFF;
1
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 9
24.02.2012, 18:28  [ТС]
Буду пробовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.02.2012, 18:28
Помогаю со студенческими работами здесь

Изменить цвет пиксела изображения BMP
Здравствуйте. Нужно поставить пиксель любого цвета в файл bmp. Без использования сторонних библиотек. Как это можно сделать?

Получение цвета пиксела из файла изображения или видео.
Очень прошу. Подскажите как, в Visual Studio С++, можно реализовать получение цвета пиксела из видео файла, например в 10 кадре. Если...

Оцифровка изображения по цвету
На рисунке изображены сегменты белого цвета. Подскажите, пожалуйста, каким образом можно найти координаты центров каждого из сегментов,...

Как сделать так, чтобы при нажатии на кнопку прямоугольник перемещался на 2 пиксела вниз а если еще раз нажать то на два пиксела вверх
Привет Всем!!! Помогите справится с задачей, такая ситуация, как в Дельфи сделать так что бы при нажатии на кнопку прямоугольник...

Сегментация изображения по синему цвету кожи "аватара"
Помогите, пожалуйста, модифицировать код программы таким образом, чтобы сегментация изображения была не только по цвету кожи обычного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru