Программная реализация метода шифрования цифровых изображений
Создание программного приложения для искажения графической информации в цифровом изображении и последующего ее восстановления. Декартово произведение множеств. Передача ключа шифрования. Генерация псевдослучайных чисел. Умножение, транспонирование матриц.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.09.2016 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
- СОДЕРЖАНИЕ
- ВВЕДЕНИЕ
- 1. Обзор форматов представления цифровых изображений
- 1.1 Растровая графика
- 1.2 Сжатие изображений
- 1.3 Структура Bitmap
- 2. Теоретические сведения
- 2.1 Декартово произведение множеств, бинарные отношения
- 2.2 Матрицы
- 2.3 Умножение и транспонирование матриц
- 3. Метод шифрования цифрового изображения
- 3.1 Прямой матричный метод
- 3.2 Метод перестановок
- 4. Алгоритм решения задач шифрования и расшифрования цифрового изображения
- 4.1 Передача ключа шифрования
- 4.2 Генерация псевдослучайных чисел
- 5. Программная реализация метода шифрования изображения
- 5.1 Форма программного приложения
- 5.2 Программные процедуры
- ЗАКЛЮЧЕНИЕ
- СПИСОК СОКРАЩЁННЫХ ОБОЗНАЧЕНИЙ
- СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
- ПРИЛОЖЕНИЯ
ВВЕДЕНИЕ
Многие отрасли техники, имеющие отношение к обработке, хранению и передаче информации, в настоящее время ориентируются на развитие систем, в которых информация представляется в виде изображений. Изображение, можно рассматривать как двумерный массив данных, который является значительно более емким носителем информации, чем обычный одномерный массив.
В то же время информацию, представленную при помощи промышленных графических форматов, можно легко считать общедоступными программными приложениями. Это может привести к нежелательным последствиям при несанкционированном доступе к информации. Для того чтобы этого избежать необходимо либо ограничить доступ третьих лиц к рабочим местам и каналам связи, что не всегда представляется возможным, либо придать информации нечитаемый вид.
Целью данной работы является создание программного приложения для искажения графической информации в цифровом изображении и последующего ее восстановления.
В настоящее время существует множество алгоритмов преобразования графических данных с целью сокрытия кодируемых ими изображений. Большинство из них опирается на шифрование и зашумление цифровых потоков независимо от форматов хранения изображений в файловой системе.
Предлагаемый в работе алгоритм шифрования растрового изображения существенно использует формат файла его хранения и реализует преобразование исходных данных путем применения матричных операций к двумерным массивам графической информации, которое приводит к «перемешиванию» пикселов исходного изображения и, как следствие, потере его информативности.
1. Обзор форматов представления цифровых изображений
1.1 Растровая графика
Растровая графика -- это изображения, составленные из пикселов (самая маленькая единица цифрового изображения), размещенных в прямоугольной сетке. Качество растрового изображения напрямую зависит от количества пикселов, из которых оно состоит -- чем больше пикселов тем больше деталей можно отобразить. Увеличить растровое изображение путем увеличения масштаба не получится -- число пикселов увеличить невозможно, в этом можно убедиться, если попытаться разглядеть мелкие детали на маленькой цифровой фотографии, приближая ее на экране; в результате этого действия разглядеть что_то кроме увеличивающихся пикселов не удастся.
Кроме того, особенностью некоторых растровых изображений может считаться наличие сжатия. Достоинством таких изображений, в первую очередь, является уменьшенный объём занимаемой памяти. Сжатие, в зависимости от выбранного алгоритма, может производиться либо с потерями либо без них.
1.2 Сжатие изображений
Сжатие с потерями -- метод сжатия данных, при использовании которого распакованные данные отличаются от исходных, но степень отличия не является существенной с точки зрения их дальнейшего использования. Этот тип компрессии применяется для сжатия аудио- и видеоданных, статических изображений, в Интернете, особенно в потоковой передаче данных, и цифровой телефонии. Одним из форматов таких изображений является JPEG. Используемый данным JPEG алгоритм сжатия с потерями в наибольшей степени пригоден для фотографий и картин, содержащих реалистичные сцены с плавными переходами яркости и цвета. Следует отметить, что этот формат не подходит для хранения изображений с высокой контрастностью (чертежи, планы), поскольку потери при сжатии приводят к искажению информации, что недопустимо.
Наибольшее распространение JPEG получил в цифровой фотографии и для хранения и передачи изображений с использованием сети Интернет.
Сжатие без потерь - метод сжатия данных, при использовании которого закодированные данные однозначно могут быть восстановлены с точностью до бита. При этом оригинальные данные полностью восстанавливаются из сжатого состояния. Этот тип сжатия принципиально отличается от сжатия данных с потерями.
Формат PNG хранит графическую информацию в сжатом виде. Причём это сжатие производится без потерь, в отличие, например, от JPEG с потерями.
PNG позиционируется прежде всего для использования в Интернете, а так же является хорошим форматом для редактирования изображений, даже для хранения промежуточных стадий редактирования, так как восстановление и пересохранение изображения проходят без потерь в качестве.
Универсальным же растровым графическим форматом является формат BMP. Представляет из себя, в основном, несжатое изображение, которое довольно легко читается и выводится в ОС Windows, в которой есть специальные функции API, которые в этом помогают.
1.3 Структура Bitmap
Данные формата BMP состоят из блоков различного размера (см. рисунок 1).
Рис. 1 - Структура Bitmap файла
1) заголовок из структуры BITMAPFILEHEADER , который содержит:
· отметка о формате;
· размер файла в байтах;
· зарезервированные системой поля;
· положение пиксельных данных относительно начала данной структуры;
2) блок BITMAPINFO, содержащий:
· информационные поля;
· битовые маски для извлечения значений цветовых каналов.
3) цветовой профиль.
4) пиксельные данные.
BITMAPFILEHEADER -- 14-байтная структура, которая располагается в самом начале файла.
BITMAPINFO в файле идёт сразу за BITMAPFILEHEADER. Данная структура является основной и описательной в формате BMP и поэтому когда просто упомянуто имя поля, то речь идёт о поле в данной структуре.
Цветовой профиль (палитра) в BMP-файлах хранится в виде списка структур RGBQUAD, где каждый элемент представляет отдельный цвет. Палитра присутствует только в BMP-файлах, с глубиной цвета пикселов 8 бит и менее. К 8-битным изображениям прикладывается палитра, состоящая из не более чем 256 элементов.
Далее следует блок с информацией о цветах пикселов в виде двумерного массива, каждый элемент которого содержит в себе данные по каждой составляющей цвета. Массив представлен в виде RGBQUAD. Данные изображения. В файле данные пикселей изображения хранятся построчно, начиная с нижней строки (см. рисунок 2).
Рис. 2 - Структура информационного блока
Набор функций WinAPI, отсутствие сжатия, а так же структура хранения информации делает BMP отличным средством достижения поставленных в работе целей [1].
2. Теоретические сведения
2.1 Декартово произведение множеств, бинарные отношения
Декартовым произведением множеств U и V называется множество упорядоченных пар, первый элемент которых принадлежит U, а второй - V
. (1)
Бинарное отношение R (из множества U в множество V) называется подмножество декартова произведения множеств U и V
.
Если , то говорят, что элементы и находятся в отношении R.
Если , то говорят, что R есть отношение на множестве U.
Бинарное отношение называется функцией (из множества U в множество V), если каждый элемент может находиться в отношении F не более, чем с одним элементом
. (2)
В таких случаях вместо записывают , и вместо записывают .
Тождественное отношение на множестве U определяется как . Тождественное отношение является функцией и .
2.2 Матрицы
Матрицей A размерности с элементами из множества U называется функция из декартова произведения множества первых m натуральных чисел и множества первых n натуральных чисел в множество U
.
Для представления матриц используют таблицы, состоящие из m строк и n столбцов, в ячейках которых размещены значения функции A, называемые элементами матрицы. Числа и называют индексами элемента матрицы , при этом вместо записывают . Матрицы и их табличные представления часто отождествляют и обозначают одним и тем же символом.
.
Число m называют высотой матрицы A, а n _ шириной матрицы A.
При матрица A называется квадратной, в противном случае - прямоугольной.
2.3 Умножение и транспонирование матриц
Определим результат операции транспонирования матрицы A размерности как матрицу размерности , элементы которой для всех и задаются следующим правилом (3)
. (3)
Таким образом, матрица
является транспонированной к матрице
Матрицы с элементами из числовых множеств, на которых определены арифметические операции сложения и умножения называются числовыми.
Определим результат операции умножения числовой матрицы A размерности справа на числовую матрицу B размерности как числовую матрицу C размерности , элементы которой для всех и задаются следующим правилом (4)
(4)
где .
Для трех произвольных числовых матриц A, B, C размерностей , , , соответственно, выполняется свойство ассоциативности (5)
. (5)
Квадратная числовая матрица размерности , элементы которой определены правилом (6)
, (6)
называется единичной.
Для произвольной числовой матрицы A размерности и единичной матрицы размерности при выполняется свойство
.
Аналогично, для произвольной числовой матрицы A размерности m и единичной матрицы размерности при выполняется свойство
.
3. Метод шифрования цифрового изображения
3.1 Прямой матричный метод
Для реализации поставленной в работе задачи реализации метода шифрования изображения необходимо воспользоваться правилами матричного умножения, и некоторыми свойствами матрицы перестановок .
Под матрицей перестановок понимается квадратная матрица, у которой в каждой строке и каждом столбце отличен от нуля только один элемент, равный единице [5].
Умножение произвольной матрицы размерности на матрицу перестановок размерности слева меняет местами строки матрицы .
Умножение произвольной матрицы размерности на матрицу перестановок размерности справа соответственно меняет местами её столбцы.
Если рассматривать цифровое изображение как квадратную матрицу размерности , элементы которой находятся в пределах от 0 до 255, задающую полутоновое отображение пикселов растра, то при умножении такой матрицы на матрицу перестановок и транспонированную к ней происходит перемешивание пикселов изображения
(7)
Известно [5] следующее свойство матрицы перестановок :
(8)
где _ единичная матрица. Согласно (8) для обратного преобразования матрицы достаточно умножить её на справа и на слева
(9)
Таким образом, матрица будет являться ключом для такого перемешивания.
Итоговая сложность матричного перемножения (9) будет равна: , что может занять достаточно большой промежуток времени при обработке больших изображений, поэтому необходимо сократить количество операций.
3.2 Метод перестановок
В силу специального вида матрицы перестановок P алгоритм умножения матриц может быть заменён на перестановки, а сама P представлена в виде кортежа перестановок, где i-й позиции кортежа ставится в соответствие позиция перестановки. При этом пропадает необходимость в матричном умножении. Оно заменяется на перестановку строк и столбцов матрицы цифрового изображения. Различия в реализации этих методов приведены в таблице 1.
Таблица 1 - Различия в реализации методов
Прямой матричный метод |
Метод перестановок |
|||
for p:=0 to length(Матрица)-1 dofor i:=0 to length(Матрица)-1 dofor j:=0 to length(Матрица)-1 dofor k:=0 to length(Матрица)-1 doTemp[i,p]:=Temp[i,p]+(МатрПерест[i,k]*Матрица[k,j]*МатрПерест[p,j]) |
for i:=0 to length(Матрица)-1 dofor j:=0 to length(Матрица)-1 doTemp[i,j] := Матрица[Перест[i],j];for j:=0 to length(Матрица)-1 dofor i:=0 to length(Матрица)-1 doМатрица[i,Перест[j]] := Temp[i,j]; |
|||
Количество операций сложения, умножения и присвоения: |
Количество операций присвоения: |
где
Как видно из приведенных в таблице 1 данных используя метод перестановок можно не только сократить количество операций, но и понизить их сложность. Операции присвоения значительно проще, нежели операции сложения и умножения, которые применимы в прямом матричном методе. Это значительно ускорило работу алгоритма, и позволило достаточно быстро обрабатывать даже большие изображения.
программный шифрование цифровой изображение
4. Алгоритм решения задач шифрования и расшифрования цифрового изображения
Алгоритм решения поставленной задачи состоит из следующих шагов:
1) получение изображения. Загрузка выбранного изображения в программное приложение;
2) чтение данных. Произвести чтение данных попиксельно из bitmap-файла, так же сохранить данные о размерах изображения (высота, ширина);
3) проверка изображения на наличие шифрования. Чтение метки шифрования;
3.1)изображение без шифрования;
3.1.1) усреднение по каналам. Вычислить среднее арифметическое значений цветовых каналов (RGB), для получения полутонового изображения из цветного;
3.1.2) запись в массив (матрицу). Записать усреднённые значения в массив данных для проведения дальнейших преобразований. Каждый элемент массива в данном случае представляет из себя отдельный пиксел полутонового изображения со своим значением тона;
3.1.3) дополнение массива. Массив данных дополняется случайными значениями от 0 до 255 справа, если высота больше ширины, или снизу, если ширина больше высоты, так чтобы результирующая матрица имела одинаковую высоту и ширину;
3.1.4) генерация кортежа перестановок. Сгенерировать кортеж перестановок (одномерную матрицу), равную матрице по размеру;
3.1.5) перестановка строк и столбцов. Произвести перестановку согласно данным из п. 3.1.4 данного алгоритма по правилу (7);
3.1.6) маркировка шифрованного изображения. В первые 8 пикселов по методу LSB записываем последовательность бит, которая будет маркировать шифрованное изображение;
3.1.7) интеграция ключа в шифрованное изображение. С помощью метода наименьшего значащего бита скрываем ключ шифрования в изображении в неявном виде по заранее определённому алгоритму.
3.1.8) сохранение данных из масива в BMP. Извлекаем данные из полученного массива в bitmap-файл, записывая значение каждого элемента массива во все три цветовых канала;
3.2) изображение содержит шифрование;
3.2.1)запись в массив (матрицу). Записать усреднённые значения в массив данных для проведения дальнейших преобразований. Каждый элемент массива в данном случае представляет из себя отдельный пиксел полутонового изображения со своим значением тона;
3.2.2)извлечение ключа из изображения. Производим процедуру, обратную п. 3.1.7 данного алгоритма;
3.2.3)генерация кортежа перестановок. Аналогично п. 3.1.4 данного алгоритма;
3.2.4)обратная перестановка строк и столбцов. Произвести перестановку согласно данным из п. 3.2.3 данного алгоритма по правилу (9);
3.2.5)сохранение данных из масива в BMP. Аналогично п. 3.1.8 данного алгоритма.
4) Сохранение изображения в файл. При необходимости сохранить изображение в файл.
В Приложении А представлена блок-схема алгоритма.
4.1 Передача ключа шифрования
Для безопасной передачи ключа шифрования подойдёт использование одного из стенографических методов сокрытия информации. Стеганография - это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи. Стремительное развитие средств вычислительной техники в последнее десятилетие дало новый толчок для развития цифровой стеганографии. Появилось много новых областей применения. Сообщения встраивают теперь в цифровые данные, такие как: речь, аудиозаписи, изображения, видео [6]. Цифровая стеганография основывается на сокрытии дополнительной информации, путём внесения искажений в цифровые объекты.
Выбор стенографического метода шифрования во многом зависит от будущего носителя секретной информации (контейнера). Формат BMP позволяет работать с отдельными битами информации, составляющими цвет пиксела. Одним из методов цифровой стеганографии является метод LSB - наименьшего значащего бита. Его суть заключается в замене младших значащих бит пиксела изображения на биты скрываемого сообщения. Человеческий глаз не способен определить малейшие изменения изображения при использовании данного метода, но следует отметить, что от количества шифруемых бит на пиксел зависит количество вносимых искажений. И если при использовании 1-2 младших бит искажения практически не могут быть зафиксированы человеческим глазом, то изменение 4-5 младших бит уже довольно сильно заметно меняет изображение (см. рисунок 3).
Рис. 3 - Отличие изображений с применением метода LSB (слева - два бита под сообщение, справа - шесть)
Применение этого метода может подойти для передачи ключа шифрования. В данном случае шифруемым сообщением будет сам ключ, а уже перемешанное изображение будет контейнером для него. Сокрытие ключа таким образом позволит в дальнейшем, принимающей стороне изъять ключ и дешифровать.
4.2 Генерация псевдослучайных чисел
В большинстве алгоритмов шифрования используются генераторы ключевой последовательности. Генератор ключевой последовательности выдает набор битов, который выглядит случайными, но в действительности является детерминированным и может быть в точности воспроизведен на стороне получателя. Чем больше генерируемый поток похож на случайный, тем больше времени потребуется криптоаналитику для взлома шифра.
Для того чтобы у принимающей стороны была возможность дешифровать сообщение, необходимо передать только инициализирующую генератор псевдослучайных чисел переменную. Существует несколько методов генерации псевдослучайных чисел, среди них - линейно конгруэнтный метод, алгоритм которого был предложен Д. Х. Лемером в 1948 году.
Рекуррентная формула выглядит следующим образом:
(10)
Период порождаемой последовательности не превышает m. Естественно, что от выбора параметров a, c, m и значения первого члена x0 существенно зависят основные свойства порождаемой последовательности. Длина периода будет максимальной (равной m) только в том случае, когда [7]:
· НОД(c, m) = 1 (т.е. c и m взаимно просты);
· a - 1 кратно всем простым делителям m;
· если m кратно 4, то и .
Зная первые четыре генерируемых числа в последовательности криптоаналитик может составить систему из четырёх уравнений и получить параметры a, c и m. Использование сложных функций в качестве параметров a и с усложняет работу алгоритма, но исключает возможность раскрытия значения параметров путём простого составления системы из четырёх уравнений.
Основным преимуществом линейных конгруэнтных генераторов является их быстрота, за счет малого количества операций на байт и простота реализации.
5. Программная реализация метода шифрования изображения
В работе программно реализован метод шифрования изображений перемешиванием пикселов. Программа написана на языке Object Pascal в среде разработки Borland Delphi 7. Листинг программы представлен в Приложении А. Блок-схема алгоритма представлена в Приложении В.
5.1 Форма программного приложения
Форма программного приложения содержит следующие визуальные компоненты:
1) Button1 - компонента предназначена для запуска программного кода извлечения данных из BMP файла, занесения их в массив и перемешивания пикселов изображения с выводом итогового результата в компоненту Image1;
2) Button2 - компонента предназначена для запуска программного кода вызова диалогового окна открытия файла с сохранением полного пути в компоненту StaticText1 и загрузки изображения в компоненту Image1, а также для запуска программного кода проверки метки шифрования изображения;
3) Button3 - компонента предназначена для запуска программного кода вызова диалогового окна сохранения файла с сохранением полного пути в компоненту StaticText2;
4) Button4 - компонента предназначена для запуска программного кода декодирования изображения с выводом итогового результата в компоненту Image1;
5) Image1 - компонента предназначена для визуального отображения загруженных данных с помощью Button2 и итоговых результатов работы программного кода Button1, Button4;
6) Memo1 - компонента предназначена для отображения прогресса обработки изображения;
7) StaticText1 - компонента предназначена для хранения полного пути к файлу, загружаемому для обработки;
8) StaticText2 - компонента предназначена для хранения полного пути к файлу, для сохранения результатов работы программного приложения;
9) Edit1 - компонента служит для ввода инициализирующего ключа, с помощью которого генерируется кортеж перестановок.
5.2 Программные процедуры
Function IntToBin(Value: int64): string; Функция преобразует число типа Int64 в строку бит.
Function BinToInt(Value: string): int64; Функция преобразует стоку бит в число типа Int64.
Function PRN(KeySec:int64; ArrDim: integer): integer; Функция генерирует псевдослучайное число.
Function FMX(ArrDim: integer): TBytesArr; Функция реализует создание матрицы перестановок для последующего матричного умножения.
Procedure MatrixToBmp(Matrix: TBytesArr); Процедура сохраняет массив пикселов в TBitmap.
Procedure ExtractRGB(Name: TBitmap; Matrix:TBytesArr); Процедура извлекает данные из загруженного Bitmap-файла, производит усреднение значений цветовых каналов и запись полученных данных в массив пикселов.
Procedure BmpToSqrMX(Matrix: TBytesArr; Flag:Boolean); Процедура производит дополнение матрицы случайными значениями до квадратной для последующего матричного умножения.
Procedure Mixing(Matrix, Biject: TBytesArr; Flag: boolean); Процедура выполняет матричное умножение, как прямое, так и обратное, является основной функцией данного программного приложения и основой метода, реализованного в нём.
Procedure ENC(Name: TBitmap); Процедура добавления метки шифрования на изображение.
Function ENC_check(Name: TBitmap): boolean; Функция проверки метки шифрования изображения.
Procedure LSB_Ins(Name: TBytesArr; key: Int64); Процедура интеграции ключа в изображение методом наименьшего значащего бита (LSB) для дешифрования изображения принимающей стороной.
Function LSB_Ext (Name: TBytesArr): Int64; Функция для извлечения ключа из изображения.
Procedure TForm1.Button1Click(Sender: TObject); Процедура реализует загрузку файла, извлечение данных из изображения в массив, изменение размеров массива с добавлением случайных значений, генерацию матрицы перестановок и перемешивание пикселов, а также интегрирует ключ шифрования в изображение методом LSB.
Procedure TForm1.Button2Click(Sender: TObject); Процедура запускает диалоговое окно, которое позволяет выбрать файл для последующей работы с ним, а также считывает метку шифрования изображения, если она присутствует.
Procedure TForm1.Button3Click(Sender: TObject); Процедура запускает диалоговое окно, позволяющее выбрать директорию и имя файла, в который будет сохранён результат обработки изображения.
Procedure TForm1.FormCreate(Sender: TObject); Процедура инициализирует стандартный генератор случайных чисел и настраивает внешний вид компонентов формы.
Procedure TForm1.FormResize(Sender: TObject); Процедура реализует масштабирование визуальных компонентов при изменении размеров формы.
ЗАКЛЮЧЕНИЕ
В работе проведен анализ форматов представления цифровых изображений, разработан и программно реализован метод шифрования цифровых изображений, который позволяет исказить изображение и передавать его по открытому каналу. Принимающая же сторона может изъять необходимую информацию из полученного изображения при условии наличия необходимого программного обеспечения. Произведено усовершенствование алгоритма для увеличения скорости шифрования изображений. Также приведён краткий обзор форматов цифровых изображений и необходимых теоретических сведений.
В Приложении Б представлен листинг разработанного программного приложения, написанного на языке Object Pascal в среде разработки Borland Delphi 7.
Приложение В содержит графический интерфейс пользователя разработанного программного приложения и пример его работы.
СПИСОК СОКРАЩЁННЫХ ОБОЗНАЧЕНИЙ
API, WinAPI - Windows Application Programming Interface, интерфейс программирования приложений Windows;
BMP, Bitmap - Bitmap Picture, рисунок Bitmap;
JPEG - Joint Photographic Experts Group, (название организации);
LSB - Last Significant Byte, наименьший значащий бит;
PNG - Portable Network Graphics, портативная сетевая графика.
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1. Bitmap - класс [Электронный ресурс]. - Режим доступа: https://msdn.microsoft.com, свободный. - Загл. с экрана. - Яз. англ.
2. Изоморфизм графов [Электронный ресурс]. - Режим доступа: http://mathcenter.spb.ru, свободный. - Загл. с экрана. - Яз. рус.
3. Высшая Школа Экономики [Электронный ресурс]. - Режим доступа: http://www.hse.ru, свободный. - Загл. с экрана. - Яз. рус.
4. Белоусов И.В. Матрицы и определители; учебное пособие по линейной алгебре [Текст]/ И.В. Белоусов. - Кишенев: 2006. - 101c.
5. Беллман Р. Введение в теорию матриц [Текст]/ Р. Беллман, пер с англ В. Я. Катковник, Р. А. Полуэктов, М. С. Эпельман. - М.: Наука 1976. - 386с.
6. Грибунин В.Г. Цифровая стеганография [Текст]/В.Г.Грибунин, И.Н. Оков, И.В.Туринцев - М.: СОЛОН-ПРЕСС, 2009 - 272с.
7. Краткий материал по алгоритмам генерации псевдослучайных последовательностей чисел [Электронный ресурс]. - Режим доступа: cmcmsu.no-ip.info/1course/random.generators.algs.html, свободный. - Загл. с экрана. - Яз. рус.
ПРИЛОЖЕНИЯ
Приложение А
Блок-схема алгоритма работы программного приложения
Приложение Б
Листинг программы
unit matrix;
interface
uses
Math, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TBytesArr = array of array of byte;
TByteArr = array of integer;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Image1: TImage;
Button4: TButton;
Memo1: TMemo;
StaticText1: TStaticText;
StaticText2: TStaticText;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Strings:TStringlist;
OD:TOpenDialog;
SD:TSaveDialog;
MX:TBytesArr;
TBA: TByteArr;
BmpHeight, BmpWidth: integer;
Key: int64;
Form1: TForm1;
MxDim: integer;
bmp:TBitmap;
i: integer;
tryed: int64;
s: string;
codeE: string;
implementation
{$R *.dfm}
function IntToBin(Value: int64): string;
var {Перевод Int64 В строку бит для закодирования по методу LSB}
i: integer;
number: int64;
begin
number:= Value;
for i:=63 downto 0 do
begin
if ((number mod 2)>0)
then
result:='1'+result
else
result:='0'+result;
number:=number div 2;
end;
end;
function BinToInt(Value: string): int64;
var {Обратно из IntToBin}
i: integer;
binstr: string;
begin
result:=0;
binstr:= Value;
for i:=63 downto 0 do
begin
if (binstr[i+1] = '1')
then
result:=result+Round(Power(2,63-i));
end;
end;
function PRN(KeySec:int64; ArrDim: integer): integer;
var {Генератор псевдослучайной последовательности чисел}
a,c: integer;
begin
a:=abs(round(KeySec*sin(pi/16*(ArrDim+1)*power(-1,ArrDim))));
c:= abs(round(KeySec*cos(pi/5*(ArrDim+1)*power(-1,ArrDim))));
Result:= abs((a*KeySec + c) mod (ArrDim+1));
end;
function FMX(KeySec: int64; ArrDim: integer): TByteArr;
var {Создание матрицы перестановок}
K,n,cnt,i,j:integer;
Flags: array of boolean;
begin
SetLength(Flags, ArrDim);
SetLength(Result, ArrDim);
for i:=0 to ArrDim-1 do
Flags[i]:=true;
n:=ArrDim-1;
for i:=0 to ArrDim-1 do
begin
k:=PRN(KeySec,n);
n:=n-1;
cnt:=-1;
for j:=0 to ArrDim-1 do
begin
if Flags[j] then
inc(cnt);
if cnt = k then
begin
Result[i]:=j;
Break;
end;
end;
Flags[j]:= False;
end;
end;
procedure MatrixToBmp(Matrix: TBytesArr);
var {Заполнение пикселей BMP}
i,j: integer;
begin
for i:=0 to Length(Matrix)-1 do
begin
for j:=0 to Length(Matrix)-1 do
bmp.Canvas.Pixels[j,i]:=RGB(Matrix[i,j],Matrix[i,j],Matrix[i,j]);
end;
end;
procedure ExtractRGB(Name: TBitmap; Matrix:TBytesArr);
var {Извлечение инфо из пикселей, усреднение, занесение в массив}
i,j: integer;
R,G,B: byte;
Color: TColor;
begin
for i:=0 to Name.Height-1 do
begin
for j:=0 to Name.Width-1 do
begin
Color:=Name.Canvas.Pixels[j,i];
R:= GetRValue(Color);
G:= GetGValue(Color);
B:= GetBValue(Color);
Matrix[i,j]:=(R+G+B) div 3; //Усреднение RGB значений
end;
end;
end;
procedure BmpToSqrMX(Matrix: TBytesArr; Flag:Boolean);
var {Добивка матрицы до квадратной}
i,j: integer;
begin
if Flag = true then
begin
for i:=0 to MxDim-1 do
begin
for j:=BmpWidth to MxDim-1 do
MX[i,j]:=Random(256); //Шумы
end;
end
else
begin
for i:=BmpHeight to MxDim-1 do
begin
for j:=0 to MxDim-1 do
MX[i,j]:=Random(256); //Шумы
end;
end;
end;
procedure Mixing(Matrix: TBytesArr; Biject: TByteArr; Flag: boolean);
var
TempMX: TBytesArr;
i,j: integer;
begin
SetLength(TempMX, Length(Matrix), Length(Matrix));
if Flag then {Закодировать}
begin
for i:=0 to length(Matrix)-1 do
for j:=0 to length(Matrix)-1 do
TempMX[i,j] := Matrix[Biject[i],j];
for j:=0 to length(Matrix)-1 do
for i:=0 to length(Matrix)-1 do
Matrix[i,Biject[j]] := TempMX[i,j];
end
else {Раскодировать}
begin
for j:=0 to length(Matrix)-1 do
for i:=0 to length(Matrix)-1 do
TempMX[i,j] := Matrix[i,Biject[j]];
for i:=0 to length(Matrix)-1 do
for j:=0 to length(Matrix)-1 do
Matrix[Biject[i],j] := TempMX[i,j];
end;
end;
procedure ENC(Name: TBitmap);
var {Заполнение первых 8 пикселей инфо по методу LSB}
i: integer;
R: byte;
codeE: string;
Color: TColor;
begin
codeE:= '01000101';
for i:=0 to 7 do
begin
Color:=Name.Canvas.Pixels[i,0];
R:= GetRValue(Color);
R:= R AND BYTE(254);
if codeE[i+1] = '1' then
inc(R);
bmp.Canvas.Pixels[i,0]:=RGB(R,R,R);
end;
function ENC_check(Name: TBitmap): boolean;
var {Извлечение инфо из первых 8 пикселей проверка на зашифрование}
i: integer;
R,G,B: byte;
codeE,str: string;
Color: TColor;
begin
codeE:= '01000101';
for i:=0 to 7 do
begin
Color:=Name.Canvas.Pixels[i,0];
R:= GetRValue(Color);
G:= GetGValue(Color);
B:= GetBValue(Color);
if (R = G) and (G = B) and (R = B) then
begin
R:= R AND BYTE(1);
if R = 1 then
str:=Str+'1'
else
str:=Str+'0';
end
else
result:=false;
end;
if str = codeE then
result:=true;
end;
procedure LSB_Ins(Name: TBytesArr; key: Int64);
var {Процедура внесения изменений в BMP для зашифрования ключа методом LSB}
i,container:integer;
count_to, count_down: integer;
R: byte;
length_dim,height_dim: integer;
key_bin: string;
begin
count_to:=1;
count_down:=64;
key_bin:= IntToBin(key);
container:=Length(Name)*Length(Name) div 63;
for i:=0 to length(key_bin)-1 do
begin
length_dim:=(8+container*i) mod Length(Name);
height_dim:=(8+container*i) div Length(Name);
R:= MX[length_dim,height_dim];
R:= R AND BYTE(254);
if (i mod 2) = 1 then
begin
if key_bin[count_to] = '1' then
begin
inc(R);
end;
MX[length_dim,height_dim]:=R;
inc(count_to);
end
else
begin
if key_bin[count_down] = '1' then
begin
inc(R);
end;
MX[length_dim,height_dim]:=R;
dec(count_down);
end;
end;
end;
function LSB_Ext (Name: TBytesArr): Int64;
var {Извлечение ключа из изображения}
i,container: integer;
count_to, count_down: integer;
R: byte;
length_dim,height_dim: integer;
key_bin: string;
begin
count_to:=1;
count_down:=64;
key_bin:='0000000000000000000000000000000000000000000000000000000000000000';
container:=Length(Name)*Length(Name) div 63;
for i:=0 to length(key_bin)-1 do
begin
length_dim:=(8+container*i) mod Length(Name);
height_dim:=(8+container*i) div Length(Name);
R:= MX[length_dim,height_dim];
R:= R AND BYTE(1);
if (i mod 2) = 1 then
begin
if R = 1 then
begin
key_bin[count_to]:='1';
end;
inc(count_to);
end
else
begin
if R = 1 then
begin
key_bin[count_down]:= '1';
end;
dec(count_down);
end;
end;
result:=BinToInt(key_bin);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if TryStrToInt64(Edit1.Text, tryed) then
begin
if StaticText1.Caption <> StaticText2.Caption then
begin
if fileexists(StaticText1.Caption) then
begin
Button1.Caption:= 'Encoding...';
Button1.Enabled:= False;
Try
begin
Key := StrToInt64(Edit1.Text);
Edit1.Enabled := False;
end;
Except
ShowMessage('Wrong Key Sequence, try another!');
end;
BmpHeight:=bmp.Height;
BmpWidth:=bmp.Width;
Setlength(MX, BmpHeight, BmpWidth) ;
ExtractRGB(bmp, MX); //Извлечение составляющих цветов
Memo1.Lines.Add('Picture extracted to data array '+TimetoStr(time));
bmp.destroy; //Уничтожение файла БМП
MxDim:= max(BmpHeight,BmpWidth);
Setlength(MX, MxDim, MxDim);
if BmpHeight <> BmpWidth then
begin
if BmpHeight = MxDim then
BmpToSqrMX(MX, true) //Дополнение До квадратной матрицы
else //Добавление шума
BmpToSqrMX(MX, false);
end;
Memo1.Lines.Add('Noise added '+TimetoStr(time));
bmp:=TBitmap.Create; //Сосздание БМП
bmp.LoadFromFile(StaticText1.Caption);
bmp.Height:=MxDim;
bmp.Width:= MxDim;
Memo1.Lines.Add('Creating a permutations array '+TimetoStr(time));
TBA:=FMX(Key,MxDim); //Создание кортежа перестановок
Memo1.Lines.Add('Encoding picture starts '+TimetoStr(time));
Mixing(MX,TBA,true); //Перемешивание матрицы пикселей
LSB_Ins(MX, Key); //LSB шифрование ключа в изображение в неявном виде
MatrixToBmp(MX); //Сохранение значения пикселей
Image1.Height:= Mxdim;
Image1.Width := Mxdim;
{Наложение маски E на первые 8 бит изображения
(Для обнаружения шифрованного изображения)}
ENC(bmp);
Image1.Picture.Bitmap:=bmp;
Memo1.Lines.Add('Picture encoded '+TimetoStr(time));
Button1.Caption:='Encoded';
end
else
begin
StaticText2.Caption:='File doesn''t exists';
ShowMessage('The same files are setted');
Button1.Caption := 'Failure';
end
end
else
begin
ShowMessage('The same files are setted');
StaticText2.Caption:='Select another file';
Button1.Caption := 'Failure';
end;
Button3.Enabled:=True;
Button4.Enabled:=True;
Button4.Caption:='Decode';
end
else
begin
ShowMessage('Wrong key sequence try another.');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
OD:=TOpenDialog.Create(nil);
OD.Execute;
StaticText1.Caption:=OD.FileName;
if OD.FileName <> '' then
begin
StaticText1.Visible :=true;
Image1.Picture.LoadFromFile(StaticText1.Caption);
bmp:=TBitmap.Create;
bmp.LoadFromFile(StaticText1.Caption);
Image1.Height := Image1.Picture.Height;
Image1.Width := Image1.Picture.Width;
Form1.FormResize(nil);
if ENC_check(bmp) then
begin
Memo1.lines.Add('Encoded picture, decode this?');
Button1.Enabled := false;
Button4.Enabled := true;
end
else
begin
Button1.Caption := 'Encode';
Button1.Enabled := true;
Edit1.Visible := true;
Edit1.Enabled := true;
end;
end
else
ShowMessage('Choose bmp file to encode');
OD.Destroy;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
SD:=TSaveDialog.Create(nil);
SD.Execute;
StaticText2.Caption:=SD.FileName;
if SD.FileName <> '' then
begin
bmp.SaveToFile(StaticText2.Caption+'.bmp');
Memo1.Lines.Add('File saved to: '+StaticText2.Caption+'.bmp');
end
else
ShowMessage('Enter filename to save');
StaticText2.Visible :=true;
SD.Destroy;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Height:=600;
Form1.Width:=800;
Memo1.top:= form1.Height-110;
Memo1.left:= 10;
Memo1.Height := 60;
Memo1.Width:= Form1.Width - 45;
Edit1.Text := 'Enter Key Sequence.';
Edit1.Visible:=False;
Edit1.Enabled:=False;
StaticText1.Visible :=false;
StaticText2.Visible :=false;
Button1.Enabled :=False;
Button4.Enabled :=False;
Button3.Enabled :=False;
Randomize; //Инициализация ГСЧ
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if Button1.Caption = 'Encoded' then
begin
Memo1.Lines.Add('Decoding starts '+TimetoStr(time));
Button4.Caption := 'Decoding...';
Mixing(MX,TBA,false); //Декодирование
MatrixToBmp(MX); //Сохранение значения пикселей
Memo1.Lines.Add('Decoding picture complete '+TimetoStr(time));
Image1.Picture.Bitmap:=bmp;
end
else
begin
MxDim:= max(bmp.Height,bmp.Width);
SetLength(MX, MxDim, MxDim);
ExtractRGB(bmp, MX);
Key:=LSB_Ext(MX);
MxDim:= max(bmp.Height,bmp.Width);
TBA:=FMX(Key, MxDim);
Mixing(MX,TBA,false);
MatrixToBmp(MX);
Image1.Picture.Bitmap:=bmp;
end;
Button4.Caption := 'Decoded';
Button4.Enabled := False;
Button1.Caption := 'Encode';
Button1.Enabled := True;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Image1.Left := Form1.ClientWidth div 2 - Image1.Height div 2;
Memo1.top:= form1.ClientHeight-65;
Memo1.left:= 10;
Memo1.Height := 60;
Memo1.Width:= Form1.Clientwidth - 20;
Button1.Left := Form1.Width - 105;
Button2.Left := Form1.Width - 185;
Button3.Left := Form1.Width - 185;
Button4.Left := Form1.Width - 105;
end;
end.
Приложение В
Интерфейс программного приложения
Размещено на Allbest.ru
Подобные документы
Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.
курсовая работа [101,1 K], добавлен 09.03.2009Симметричные криптосистемы; алгоритмы шифрования и дешифрования данных, их применение в компьютерной технике в системах защиты конфиденциальной и коммерческой информации. Основные режимы работы алгоритма DES, разработка программной реализации ключа.
курсовая работа [129,6 K], добавлен 17.02.2011Реализация алгоритма DES и режимов шифрования для любой длины сообщения и любой длины ключа. Шифрование сообщений различной длины и ключа с замериванием времени и скорости шифрования. Реализация алгоритма RSA. Сохранение зашифрованного файла на диск.
курсовая работа [398,4 K], добавлен 26.01.2010Автоматизация процесса шифрования на базе современных информационных технологий. Криптографические средства защиты. Управление криптографическими ключами. Сравнение симметричных и асимметричных алгоритмов шифрования. Программы шифрования информации.
курсовая работа [795,7 K], добавлен 02.12.2014Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.
курсовая работа [314,2 K], добавлен 27.01.2015Спецификация требований к разрабатываемому приложению. Разработка структурной схемы интерфейса. Описание алгоритма шифрования DES. Разработка программного кода приложения "DES". Проведение исследования основных шагов для генерации ключей и шифрования.
курсовая работа [398,4 K], добавлен 13.12.2022Особенности шифрования данных, предназначение шифрования. Понятие криптографии как науки, основные задачи. Анализ метода гаммирования, подстановки и метода перестановки. Симметрические методы шифрования с закрытым ключом: достоинства и недостатки.
курсовая работа [564,3 K], добавлен 09.05.2012Электронная цифровая подпись. Асимметричные алгоритмы шифрования. Сценарий распределения открытых ключей, обмен сертификатами. Выбор программных средств. Математическая модель. Скорости Эль-Гамаля для различных длин модулей. Программная реализация.
дипломная работа [461,7 K], добавлен 22.09.2011История криптографии. Сравнение алгоритмов шифрования, применение в операционной системе. Анализ продуктов в области пользовательского шифрования. Включение и отключение шифрования на эллиптических кривых. Использование хеш-функции. Электронная подпись.
курсовая работа [492,6 K], добавлен 18.09.2016Шифрование с использованием симметричных алгоритмов. Генерация зарытого ключа для асимметричных алгоритмов шифрования. Применение асимметричных алгоритмов шифрования. Управление цифровыми сертификатами и управление списками отзыва сертификатов.
учебное пособие [677,6 K], добавлен 13.10.2015