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

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

24.02.2012, 12:56. Показов 4266. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2012, 12:56
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

Добавлено через 44 минуты
Дали некоторую подсказку: поскольку шифрованые числа могут быть больше 255 надо преобразовать его так как для вывода цветного изображения.
0
60 / 21 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 17:43 11
Логично. Из ч/б картинки получаем цветной шум. В приведенной тобой фотографии так и есть.
0
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 9
24.02.2012, 18:03  [ТС] 12
осталось дело за малым преобразовать интенсивность ч/б пиксела в RGB
0
60 / 21 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 18:10 13
Ну как. Берем число 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  [ТС] 14
Буду пробовать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2012, 18:28

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru