Принцип работы алгоритма
Так было сделано и для текста и для ключа. Далее символы по UTF-8 переводились в десятичные числа. Восемь символом которые мы взяли в начале делятся на 2 блока L0 и R0, каждой переменной принадлежит 4 символа. Первые 4 записываются в L0, вторые в R0. Так алгоритм выполняется свою работу для каждых восьми символов текста, пока текст не закончится. Шифровка выводится на экран символами… Читать ещё >
Принцип работы алгоритма (реферат, курсовая, диплом, контрольная)
Алгоритм CAST в криптографии — блочный алгоритм симметричного шифрования на основе сети Фейстеля. Сеть Фейстеля, конструкция Фейстеля — один из методов построения блочных шифров. Сеть состоит из ячеек, называемых ячейками Фейстеля. На вход каждой ячейки поступают данные и ключ. На выходе каждой ячейки получают изменённые данные и изменённый ключ. Все ячейки однотипны, и говорят, что сеть представляет собой определённую многократно повторяющуюся (итерированную) структуру. Ключ выбирается в зависимости от алгоритма шифрования/расшифрования и меняется при переходе от одной ячейки к другой. При шифровании и расшифровании выполняются одни и те же операции; отличается только порядок ключей. Ввиду простоты операций сеть Фейстеля легко реализовать как программно, так и аппаратно. Большинство современных блочных шифров (DES, RC2, RC5, RC6, Blowfish, FEAL, CAST-128, TEA, XTEA, XXTEA и др.) используют сеть Фейстеля в качестве основы.
CAST-128 основан на сети Фейстеля. Полный алгоритм шифрования изложен ниже.
Реализация алгоритма была осуществлена на языке C# в Visual Studio в приложении — WindowsForms.
Создали форму, кнопки и области для вводя текста и ключей.
В данной программе для текста взяли международный язык — английский, по нему и проходило шифрование текста. Все данные появляются по кнопке «Текст из файла», из файла на поле программы загружается текст, который будем шифровать и два ключа, ключ маскировки и ключ перестановки. Есть ещё две кнопки, одна из них выход из программы — «Выход», вторая — «Зашифровать».
Зашифровка происходит по следующему принципу:
Мы берём текст и из его начала берём 8 символов, что соответствует 64 битам информации. Ключ состоит из 32 бит — 4 символа. Для кодировки взяли UTF-8. UTF-8 является кодировкой с переменной длиной кодирования. Если символ может быть закодирован одним байтом (потому что номер пункта символа очень маленький), UTF-8 закодирует его одним байтом. Если нужно 2 байта, то используется 2 байта. Кодировка сообщает старшими битами, сколькими битами кодируется текущий символ. Такой способ экономит место, но так же и тратит его в случае, если эти сигнальные биты часто используются. В данном случае английские символы кодируют 7-ю битами. Чтобы было удобнее производить вычисления, было выполнено следующее действие: для каждого символа, который представляет меньше 8 бит — добавить нули в начало этого символа, чтобы стало ровно 8 символов.
Так было сделано и для текста и для ключа. Далее символы по UTF-8 переводились в десятичные числа. Восемь символом которые мы взяли в начале делятся на 2 блока L0 и R0, каждой переменной принадлежит 4 символа. Первые 4 записываются в L0, вторые в R0.
В R0 поступает 4 символа и ключ маскировки, который складывается с каждым символом по модулю 2 (XOR). Далее происходит сдвиг на 1 влево.
Каждый символ внутри программы разделён пробелом, так программа понимает, к какому из чисел обращаются. Все числа записаны в два двумерных массива LL и RR. Каждый представляет собой одномерный массив, в ячейках которого находится ещё один одномерный массив. Первый массив состоит из 16 так как у нас 16 раундов, второй из 4, так как по 4 символа используются для вычисления. После того, как прошло сложение и сдвиг, происходит сложение по модулю 2 с левой стороной текста.
Далее текст с левой стороны переходит на правую сторону, а начальное значение правой стороны, на левую сторону. Такая перестановка будет 12 раундов. Потом во избежание больших чисел после первого сложения происходит обычное вычитание из числа раунда, раунда предыдущего, а потом сдвиг на определённое число. После этого так же складывается с левой стороной и меняется местами до 16 раунда.
Далее нужно вывести полученный текст правая и левые стороны поменялись местами на последнем раунде, следовательно, нужно поменять их местами.
Меняем местами и склеиваем.
Так алгоритм выполняется свою работу для каждых восьми символов текста, пока текст не закончится. Шифровка выводится на экран символами соответствующим их номерам таблицы. Номера берётся из последнего раунда, после всех перестановок.
Рис. 1 Работа функции R программы