Шифрование текстов. Основные принципы. Метод Гронсфельда
Шифры сложной замены. Особенности двумерного массива. Система шифрования Вижинера. Основные приёмы работы с файлами на языке Паскаль. Программа реализация алгоритмов шифрования, дешифрования Гронсфельда. Структура данных двумерный массив, операции с ним.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 10.04.2012 |
Размер файла | 30,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Шифрование текстов. Основные принципы. Метод Гронсфельда
Шифры сложной замены
Шифры сложной замены называют многоалфавитными, так как для шифрования каждого символа исходного сообщения применяют свой шифр простой замены. Многоалфавитная подстановка последовательно и циклически меняет используемые алфавиты.
При r-алфавитной подстановке символ x0 исходного сообщения заменяется символом y0 из алфавита В0, символ x1 - символом y1 из алфавита B1, и так далее, символ xr-1 заменяется символом yr-1 из алфавита Br-1, символ xr заменяется символом yr снова из алфавита Во, и т.д.
Общая схема многоалфавитной подстановки для случая г=4 показана в таблице.
Входной символ: |
X0 |
X1 |
X2 |
X3 |
X4 |
X5 |
X6 |
X7 |
X8 |
X9 |
|
Алфавит подстановки: |
B0 |
B1 |
B2 |
B3 |
B0 |
B1 |
B2 |
B3 |
B0 |
B1 |
Схема г-алфавитной подстановки для случая г=4
Эффект использования многоалфавитной подстановки заключается в том, что обеспечивается маскировка естественной статистики исходного языка, так как конкретный символ из исходного алфавита А может быть преобразован в несколько различных символов шифровальных алфавитов Вj. Степень обеспечиваемой защиты теоретически пропорциональна длине периода г в последовательности используемых алфавитов Вj.
Многоалфавитные шифры замены предложил и ввел в практику криптографии Леон Батист Альберти, который также был известным архитектором и теоретиком искусства. Его книга "Трактат о шифре", написанная в 1566 г., представляла собой первый в Европе научный труд по криптологии. Кроме шифра многоалфавитной замены, Альберти также подробно описал устройства из вращающихся колес для его реализации. Криптологи всего мира почитают Л.Альберти основоположником криптологии.
Шифр Гронсфельда
Этот шифр сложной замены, называемый шифром Гронсфельда, представляет собой модификацию шифра Цезаря числовым ключом. Для этого под буквами исходного сообщения записывают цифры числового ключа. Если ключ короче сообщения, то его запись циклически повторяют. Шифртекст получают примерно, как в шифре Цезаря, но отсчитывают по алфавиту не третью букву (как это делается в шифре Цезаря), а выбирают ту букву, которая смещена по алфавиту на соответствующую цифру ключа. Например, применяя в качестве ключа группу из четырех начальных цифр числа e (основания натуральных логарифмов), а именно 2718, получаем для исходного сообщения ВОСТОЧНЫЙ ЭКСПРЕСС следующий шифртекст:
Сообщение |
В |
О |
С |
Т |
О |
Ч |
Н |
Ы |
Й |
Э |
К |
С |
П |
Р |
Е |
С |
С |
|||
Ключ |
2 |
7 |
1 |
8 |
2 |
7 |
1 |
8 |
2 |
7 |
1 |
8 |
2 |
7 |
1 |
8 |
2 |
|||
Шифртекст |
Д |
Х |
Т |
Ь |
Р |
Ю |
О |
Г |
Л |
Д |
Л |
Щ |
С |
Ч |
Ж |
Щ |
У |
Чтобы зашифровать первую букву сообщения В, используя первую цифру ключа 2, нужно отсчитать вторую по порядку букву от В в алфавите
В |
Г |
Д |
|
1 |
2 |
получается первая буква шифртекста Д.
Следует отметить, что шифр Гронсфельда вскрывается относительно легко, если учесть, что в числовом ключе каждая цифра имеет только десять значений, а значит, имеется лишь десять вариантов прочтения каждой буквы шифртекста. С другой стороны, шифр Гронсфельда допускает дальнейшие модификации, улучшающие его стойкость, в частности двойное шифрование разными числовыми ключами.
Структура данных двумерный массив, операции с ним
Массивы, строки и индексы
Конкретный элемент массива обозначается с помощью ссылки на переменную массива, за которой указывается индекс, задающий элемент. Конкретный символ в строковой переменной обозначается с помощью ссылки на строковую переменную, за которой указывается индекс, задающий позицию символа.
Индексные выражения обозначают элементы в соответствующей размерности массива. Число выражений не должно превышать числа индексных типов в объявлении массива. Более того, тип каждого выражения должен быть совместим по присваиванию с соответствующим индексным типом.
В случае многомерного массива одинаково можно использовать несколько индексов или несколько выражений в индексе; например
Matrix[I][J] тождественно Matrix[I, J]
Строковую переменную можно проиндексировать с помощью одиночного индексного выражения, значение которого должно быть в диапазоне 0..N, где N - указанный в объявлении размер строки. Это дает доступ к каждому символу в строковом значении, с типом Char, даваемому этому символьному значению.
Первый символ строковой переменной (индекс 0) содержит динамическую длину строки; то есть Length(S) тождественно Ord(S[0]). Если атрибуту длины присваивается значение, то компилятор не проверяет, является ли это значение меньше объявленного размера строки. Вы можете указать индекс строки и вне ее текущей динамической длины. В этом случае считываемые символы будут случайными, а присваивания вне текущей длины не повлияют на действительное значение строковой переменной.
Особенности двумерного массива
Двумерный массив представляет собой квадратную или прямоугольную матрицу. Т.е. с двумерным массивом можно производить практически все действия, что и с матрицами.
Для работы с двумерными массивами, для обращения к каждому элементу для проведения операции над каждым элементом двумерного массива, часто необходимо в программах применять двойной вложенный цикл, т.е. при для каждого значения одного индекса массива нужно перебрать каждое значение другого индекса.
Шифр Гронсфельда представляет собой по существу частный случай системы шифрования Вижинера.
Система шифрования Вижинера
Система Вижинера впервые была опубликована в 1586 г. и является одной из старейших и наиболее известных многоалфавитных систем. Свое название она получила по имени французского дипломата XVI века Блеза Вижинера, который развивал и совершенствовал криптографические системы.
Система Вижинера подобна такой системе шифрования Цезаря, у которой ключ подстановки меняется от буквы к букве. Этот шифр многоалфавитной замены можно описать таблицей шифрования, называемой таблицей (квадратом) Вижинера. На рис.1 и 2 показаны таблицы Вижинера для русского и английского алфавитов соответственно.
Таблица Вижинера используется для зашифрования и расшифрования.
Таблица имеет два входа:
? верхнюю строку подчеркнутых символов, используемую для считывания очередной буквы исходного открытого текста;
? крайний левый столбец ключа.
Последовательность ключей обычно получают из числовых значений букв ключевого слова.
При шифровании исходного сообщения его выписывают в строку, а под ним записывают ключевое слово (или фразу). Если ключ оказался короче сообщения, то его циклически повторяют. В процессе шифрования находят в верхней строке таблицы очередную букву исходного текста и в левом столбце очередное значение ключа. Очередная буква шифртекста находится на пересечении столбца, определяемого шифруемой буквой, и строки, определяемой числовым значением ключа.
Пусть ключевая последовательность имеет длину r, тогда ключ r-алфавитной подстановки есть r-строка
Система шифрования Вижинера преобразует открытый текст в шифртекст с помощью ключа согласно правилу
где
Рассмотрим пример получения шифртекста с помощью таблицы Вижинера. Пусть выбрано ключевое слово АМБРОЗИЯ. Необходимо зашифровать сообщение ПРИЛЕТАЮ СЕДЬМОГО.
Выпишем исходное сообщение в строку и запишем под ним ключевое слово с повторением. В третью строку будем выписывать буквы шифртекста, определяемые из таблицы Вижинера.
Сообщение |
П |
Р |
И |
Л |
Е |
Т |
А |
Ю |
С |
Е |
Д |
Ь |
М |
О |
Г |
О |
||||
Ключ |
А |
М |
Б |
Р |
О |
З |
И |
Я |
А |
М |
Б |
Р |
О |
З |
И |
Я |
||||
Шифртекст |
П |
Ъ |
Й |
Ы |
У |
Щ |
И |
Э |
С |
С |
Е |
К |
Ь |
Х |
Л |
Н |
Работа с файлами в языке Паскаль
Общие сведения
Файловая переменная в Паскале - это любая переменная файлового типа. В Паскале имеются три класса файлов: типированный файл, текстовый файл, нетипированный файл.
Перед использованием файловой переменной она должна быть связана с внешним файлом с помощью вызова процедуры Assign. Внешним файлом обычно является поименованный файл на диске, но он также может представлять собой устройство, как например, клавиатуру или дисплей. Во внешних файлах сохраняется записанная в файл информация, или они служат источниками информации, которая считывается из файла.
Когда связь с внешним файлом установлена, для подготовки ее к операции ввода или вывода файловая переменная должна быть "открыта".
Существующий файл можно открыть с помощью процедуры Reset, а новый файл можно создать и открыть с помощью процедуры Rewrite. Текстовые файлы, открытые с помощью процедуры Reset, доступны только для чтения, а текстовые файлы, открытые с помощью процедуры Rewrite и Append, доступны только для записи. Типированные и нетипированные файлы всегда допускают как чтение, так и запись, независимо от того, были они открыты с помощью процедуры Reset или с помощью процедуры Rewrite. Когда начинается выполнение программы, всегда автоматически открываются стандартные текстовые файловые переменные Input и Output (ввод и вывод). Input - это доступный только для чтения файл, связанный с клавиатурой, а Output - это доступный только для записи файл, связанный с дисплеем.
Любой файл представляет собой линейную последовательность элементов, каждый из которых имеет сложный тип (или тип записи) файла. Каждый элемент файла имеет номер. Первый элемент файла считается нулевым элементом.
Обычно доступ к файлам организуется последовательно, то есть, когда элемент считывается с помощью стандартной процедуры Read или записывается с помощью стандартной процедуры Write, текущая позиция файла перемещается к следующему по порядку элементу файла. Однако к типированным и нетипированным файлам можно организовать прямой доступ с помощью стандартной процедуры Seek, которая перемещает текущую позицию файла к заданному элементу. Текущую позицию в файле и текущий размер файла можно определить с помощью стандартных функций FilePos и FileSize.
Когда программа завершит обработку файла, он должен закрываться с помощью стандартной процедуры Close. После полного закрытия файла, связанный с ним внешний файл обновляется. Затем файловая переменная может быть связана с другим внешним файлом.
По умолчанию, при всех обращениях к стандартным функциям и процедурам ввода/вывода автоматически производится проверка на наличие ошибок. При обнаружении ошибки программа прекращает работу и выводит на экран сообщение об ошибке. С помощью директив компилятора {$I+} и {$I-} эту автоматическую проверку можно включить или выключить. Когда автоматическая проверка отключена, то есть когда процедура или функция была скомпилирована с директивой {$I-}, ошибки ввода/вывода, возникающие при работе программы, не приводят к ее останову. При этом, чтобы проверить результат выполнения операции ввода/вывода, нужно использовать стандартную функцию IOResult.
Процедуры Ввода/Вывода
Процедура |
Описание |
|
Assign |
Присваивает имя внешнего файла файловой переменной |
|
ChDir |
Меняет текущий справочник |
|
Close |
Закрывает открытый файл |
|
Erase |
Удаляет внешний файл |
|
GetDir |
Возвращает текущий справочник на заданном диске |
|
MkDir |
Создает подсправочник |
|
Rename |
Переименовывает внешний файл |
|
Reset |
Открывает существующий файл |
|
Rewrite |
Создает и открывает новый файл |
|
RmDir |
Удаляет пустой подсправочник |
|
Seek |
Передвигает текущую позицию файла на указанную компоненту (не используется с текстовыми файлами) |
|
Truncate |
Усекает размер файла до текущей позиции в файле. (Не используется с текстовыми файлами) |
Функции Ввода/Вывода
Функция |
Описание |
|
Eof |
Возвращает для файла состояние end-of-file (конец файла) |
|
FilePos |
Возвращает текущую позицию в файле. (Не испольтзуется с текстовыми файлами) |
|
FileSize |
Возвращает текущий размер файла. (Не испольтзуется с текстовыми файлами) |
|
IOResult |
Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода |
Текстовые файлы
В этом разделе описываются операции ввода/вывода, использующие файловую переменную стандартного типа Text. Заметим, что в Turbo Pascal тип Text отличается от типа file of char. При открытии текстового файла внешний файл интерпретируется особым образом: считается, что он представляет собой последовательность символов, сгруппированных в строки, где каждая строка заканчивается символом конца строки (end of line), который представляет собой символ перевода каретки, за которым, возможно, следует символ перевода строки.
Для текстовых файлов существует специальный вид операций чтения и записи (Read и Write), которые позволяют вам считывать и записывать значения, тип которых отличается от типа Char. Такие значения автоматически переводятся в символьное представление и обратно. Например, Read(F, i), где i - переменная целого типа, приведет к считыванию последовательности цифр, интерпретации этой последовательности, как десятичного числа, и сохранению его в i.
Как было отмечено ранее, имеются две стандартные переменные текстового типа - Input и Output. Стандартная файловая переменная Input - это доступный только для чтения файл, связанный со стандартным файлом ввода операционной системы (обычно это клавиатура), а стандартная файловая переменная Output - это доступный только для записи файл, связанный со стандартным файлом вывода операционной системы (обычно это дисплей). Перед началом выполнения программы файлы Input и Output автоматически открываются, как если бы были выполнены следующие операторы:
Assign(Input,''); Reset(Input);
Assign(Output,''); Rewrite(Output);
Аналогично, после выполнения программы эти файлы автоматически закрываются.
Если программа использует стандартный модуль Crt, то файлы Input и Output не будут по умолчанию относиться к стандартным файлам ввода/вывода. Для некоторых стандартных процедур, список которых приведен в данном разделе, не требуется явно указывать в качестве параметра файловую переменную. Если этот параметр опущен, то по умолчанию будут рассматриваться Input и Output, в зависимости от того, будет ли процедура или функция ориентирована на ввод или вывод. Например, Read(Х) соответствует Read(Input,Х) и Write(Х) соответствует Write(Output,Х).
Если при вызове одной из процедур или функций из этого раздела вы задаете файл, этот файл должен быть связан с внешним файлом с помощью процедуры Assign и открыт с помощью процедуры Reset, Rewrite, или Append. Если для ориентированной на вывод процедуры или функции Вы указываете на файл, который был открыт с помощью процедуры Reset, то выведется сообщение об ошибке.
Аналогично, будет ошибкой задавать для ориентированной на ввод процедуры или функции файл, открытый с помощью процедур Rewrite или Append.
Процедуры
Процедура |
Описание |
|
Append |
Открывает существующий файл для добавления |
|
Flush |
Выталкивает буфер файла вывода |
|
Read |
Считывает одно или более значений из текстового файла в одну или более переменных |
|
Readln |
Выполняет те же действия, что и Read, а потом делает пропуск до начала следующей строки файла |
|
SetTextBuf |
Назначает буфер ввода/вывода для текстового файла |
|
Write |
Записывает в текстовый файл одно или более значений |
|
Writeln |
Выполняет те же действия, что и Write, а затем добавляет к файлу маркер конца строки |
Функции
Функция |
Описание |
|
Eoln |
Возвращает для файла состояние end-of-line (конец строки) |
|
SeekEof |
Возвращает для файла состояние end-of-file (конец файла) |
|
SeekEoln |
Возвращает для файла состояние end-of-line (конец строки) |
Нетипированные файлы
Нетипированные файлы представляют собой каналы ввода/вывода нижнего уровня, используемые в основном для прямого доступа к любому файлу на диске, независимо от его типа и структуры. Любой нетипированный файл объявляется со словом file без атрибутов, например:
var
Datafile : file;
Для нетипированных файлов в процедурах Reset и Rewrite допускается указывать дополнительный параметр, чтобы задать размер записи, использующийся при передаче данных. По умолчанию длина записи равна 128 байт. Предпочтительной длиной записи является длина записи, равная 1, поскольку это единственное значение, которое точно отражает размер любого файла (если длина записи равна 1, то неполные записи невозможны).
За исключением процедур Read и Write для всех нетипированных файлов допускается использование любой стандартной процедуры, которую разрешено использовать с типированными файлами. Вместо процедур Read и Write здесь используются соответственно процедуры BlockRead и BlockWrite, позволяющие пересылать данные с высокой скоростью.
шифр файл паскаль двумерный массив
Процедуры
Процедура |
Описание |
|
BlockRead |
Считывает в переменную одну или более записей |
|
BlockWrite |
Записывает одну или более записей из переменной |
Переменная FileMode
Переменная FileMode, определенная в модуле System, устанавливает код доступа, который передается в DOS, когда типированные и нетипированные файлы (но не текстовые) открываются с помощью процедуры Reset.
По умолчанию задается значение FileMode равное 2, которое разрешает и чтение, и запись.
Присваивание другого значения переменной FileMode приводит к тому, что все последующие вызовы процедуры Reset будут использовать этот режим.
Диапазон возможных значений FileMode зависит от используемой версии DOS. Однако для всех версий задаются следующие режимы:
0 : только чтение
1 : только запись
2 : чтение/запись
Версия 3.X DOS задает дополнительные режимы, которые главным образом связаны с разделенным использованием файлов в сетях. (Для получения более подробной информации, обратитесь к руководству программиста по DOS).
Примечание: Новые файлы, созданные с помощью процедуры Rewrite, всегда открываются в режиме Read/Write, соответствующем значению переменной FileMode = 2.
Реализация
Приведём блок-схемы написанных программ.
Программа поиска самого длинного слова в предложении с наибольшим количеством слов
1. Читаем текст в массив строк
2. Разбиваем каждую строку на слова - создаём двумерный массив
3. Находим предложение с наибольшим количеством слов
4. В этих предложениях находим самое длинное слова метод перебора длин
5. Выбираем в выбранных по наибольшему количеству слов предложениях все слова с найденной наибольшей длиной
Программа реализация алгоритмов шифрования и дешифрования Гронсфельда
1. Читаем файл в массив строк
2. Посимвольно перебираем весь файл и находим для каждого символа его во всех заданных алфавитах
3. Если символ найден, то заменяем его в массиве-копии исходного, согласно коду. Если не найден, оставляем прежним
4. Выполняем вывод результатов на экран и в файл
Выводы
1. Освоены основные приёмы шифрования текста. Реализован метод Гронсфельда.
2. Освоены основные приёмы работы с файлами на языке Паскаль.
3. Освоены методы работы со структурой данных двумерный массив.
4. Написаны и отлажены 3 программы: работа поиск слова наибольшей длины среди предложений с наибольшим количеством слов, шифратор и дешифратор по методу Гронсфельда.
Замечания
Работа по шифрованию данных, с файлами и с двумерными массивами принципиально не отличается при работе на другом языке.
Размещено на Allbest.ru
Подобные документы
Понятие шифров сложной замены. Шифры сложной замены называют многоалфавитными. Данная подстановка последовательно и циклически меняет используемые алфавиты. Понятие схемы шифрования Вижинера. Стойкость шифрования методом гаммирования и свойство гаммы.
реферат [52,2 K], добавлен 22.06.2010История появления и развития шифрования текста. Проблема шифрования и дешифрования текстовых сообщений в современности. Создание программы для зашифровки и расшифровки вводимого текста пятью методами: Атбаш, Цезаря, Полибия, Гронсфельда и Винжера.
курсовая работа [923,6 K], добавлен 26.12.2011Основные требования к разрабатываемым программам и исходным текстовым файлам. Характеристика шифров замены. Укрупненные структурные схемы и коды программ шифрования и дешифрования, скриншоты их выполнения. Пример зашифрованного текста и его дешифрования.
курсовая работа [556,8 K], добавлен 14.01.2013Схема работы и требования к программам шифрования и дешифрования. Алгоритмы и тексты программы шифрования и программы дешифрования, выполненные на языке программирования C/C++. Содержание файла с исходным текстом, с шифротекстом, с дешифрованным текстом.
курсовая работа [24,7 K], добавлен 20.10.2014Принцип программной реализации классических криптографических методов. Метод шифрования с использованием таблицы Виженера. Создание текстового редактора "Блокнот", содержащего методы шифрования. Вербальный алгоритм и программа для методов шифрования.
курсовая работа [2,0 M], добавлен 20.01.2010Простейшие шифры и их свойства. Криптостойкость шифра как его основной показатель эффективности. Шифратор Ч. Уитстона. Размер ключа перестановки. Алгоритм сложной замены – шифр Гронсфельда. Ассиметричная криптографическая система с открытым ключом.
курсовая работа [512,3 K], добавлен 18.01.2013Особенности шифрования данных, предназначение шифрования. Понятие криптографии как науки, основные задачи. Анализ метода гаммирования, подстановки и метода перестановки. Симметрические методы шифрования с закрытым ключом: достоинства и недостатки.
курсовая работа [564,3 K], добавлен 09.05.2012Шифрование - широко используемый криптографический метод сохранения конфиденциальности информации. Описание схемы шифрования и расшифрования. Структура алгоритмов на основе сети Фейстеля. Скриншоты работающей программы. Скорость работы алгоритмов.
курсовая работа [545,2 K], добавлен 29.11.2010Основные инструменты и приемы для аутентификации клиента и шифрования информации. Шифрование и дешифрование методом одиночной и двойной перестановки, методом Кордано и Гронсфельда. Маловероятные сочетания букв и истинная последовательность столбцов.
курсовая работа [50,3 K], добавлен 23.12.2010Сравнение производительности программных реализаций алгоритмов шифрования с оптимизациями под языки С и Java. История разработки, сущность, принципы шифрования и успехи в криптоанализе таких алгоритмов шифрования как AES, RC4, RC5, RC6, Twofish и Mars.
реферат [1,3 M], добавлен 13.11.2009