Главная страница
Навигация по странице:

  • Задание 2. Компоненты Delphi 7  Для кнопки « Задание 1», выполнить следующие действия

  • Для зашифровки: IdEncoderQuotedPrintable IdEncoderUUE IdEncoderMIME Для расшифровки

  • Задание 3 Реализация функции md5 в Delphi Алгоритм MD5

  • Результат 6 Задание 4 Генерация случайных чисел Random()

  • Random()

  • RandomRange(10,100)

  • Функция проверки на простоту числа

  • Лабораторная работа Delphi_ШИФР_md5. Лабораторная работа Delphi Шифрование и расшифрование информации. Часть Задание Создайте свой титульный лист ( рис ниже) При нажатие на кнопку Лабораторный комплекс, откроется Form 2


    Скачать 1.27 Mb.
    НазваниеЛабораторная работа Delphi Шифрование и расшифрование информации. Часть Задание Создайте свой титульный лист ( рис ниже) При нажатие на кнопку Лабораторный комплекс, откроется Form 2
    АнкорDelphi
    Дата20.02.2023
    Размер1.27 Mb.
    Формат файлаpdf
    Имя файлаЛабораторная работа Delphi_ШИФР_md5.pdf
    ТипЛабораторная работа
    #946667

    1
    Лабораторная работа Delphi « Шифрование и
    расшифрование информации». Часть 2.
    Задание 1.
     Создайте свой титульный лист ( рис. ниже)

    При нажатие на кнопку «Лабораторный комплекс», откроется Form 2.

    2
    Задание 2. Компоненты Delphi 7
    Для кнопки « Задание 1», выполнить следующие действия
    Рассмотрим простейший пример с использованием стандартных компонентов Delphi7. Компоненты вкладки Indy Misc
    Для зашифровки:

    IdEncoderQuotedPrintable

    IdEncoderUUE

    IdEncoderMIME
    Для расшифровки:

    IdDecoderQuotedPrintable

    IdDecoderUUE

    IdDecoderMIME
    1. Создайте Form 3 и поменяйте название ,
    2. разместите объекты: 2 кнопки, 2 Memo, 1 компонент - IdEncoderXXE - зашифровывает информацию, 2 компонент - IdDecoderXXE – расшифровывает.
    3. Создайте «Меню».
    4. Создайте панель статуса
    Код программы для двух кнопок

    3
    5. Добавьте на форму объекты , которые показаны на рисунке и добавьте нужные объекты, только кнопки. Используйте толь Memo1 и Memo 2
    Кому интересно
    Статья MD5, Base64, HMAC-SHA-1 в Delphi средствами INDY , Synapse. https://webdelphi.ru/2010/05/kriptografiya-v-delphi-sredstvami-indy-i-synapse/
    Задание 3 Реализация функции md5 в Delphi
    Алгоритм MD5
    MD5 (англ. Message Digest 5) — 128-битный алгоритм хеширования,
    разработанный профессором Рональдом Л. Ривестом из Массачусетского
    технологического института в 1991 году. Предназначен для создания
    «отпечатков» или «дайджестов» сообщений произвольной длины. Является
    улучшенной в плане безопасности версией MD4. Зная MD5-образ
    (называемый также MD5-хеш или MD5-дайджест), невозможно
    восстановить входное сообщение, так как одному MD5-образу могут
    соответствовать разные сообщения. Используется для проверки
    подлинности опубликованных сообщений путѐм сравнения дайджеста
    сообщения с опубликованным. Эту операцию называют «проверка хеша»
    (hashcheck).
    MD5 – это алгоритм предназначенный для преобразования входного массива данных в выходную битовую строку фиксированной длины.
    Алгоритм должен удовлетворять следующие условия:
    1. При одинаковых начальных значениях результат работы должен быть также одинаковый.
    2. При незначительных изменениях входных данных, результат функции будет сильно отличаться.
    3. Трудно найти две пары значений с одинаковыми MD5.
    4. Результат работы функции MD5 - строка фиксированной длины
    Пример.
    Если мы разрабатываем программу и нам необходимо хранить пароли в базе данных. Хранить их в явном виде не рекомендуется. Потребуется шифровка паролей. Можно поступить следующем образом:

    4
    1. В начале пароля и в конце добавляем произвольные переменные.
    Допустим, что у нас пароль – «password». В начало пароля добавим восклицательный знак, а в конец точку. Получим «!password.»
    2. Полученную строку обработаем функцией md5
    3. Результат сохраняем.
    Теперь чтобы проверить правильность ввода пароля делаем следующее:
    1. Сохраняем введенный пользователем пароль в переменную
    2. В начало и в конец переменной добавляем все те же «!» в начало и «.» в конец
    3. Применяем функцию MD5
    4. Сравниваем результат с тем, что хранится в базе. Результаты должны совпасть.
    Задание.
    Написать программу, реализующую описанный алгоритм. За тем исключением, что пароли хранить будем в программе, а не в базе данных.
     создайте новый проект.(Form)
     На форме приложения разместите 4 компонента Edit, 1 button, 1 label.
    В первый edit мы будем вводить пароль, во втором будет отображен результат работы алгоритма над паролем. В третий edit будем вводить второй пароль, в четвертый результат работы алгоритма над вторым паролем. Если результаты в edit2 и Edit4 будут равны, то исходные пароли тоже равны
    Код программы
    Чтобы применить алгоритм хеширования, первое что нам нужно подключить модуль IdHashMessageDigest. Подключаем его в uses.
     Далее необходимо описать функцию md5.Функция хеширования выглядит следующим образом:

    5
     Код для кнопки
    Random()'>Результат

    6
    Задание 4 Генерация случайных чисел
    Random(), она генерирует случайное целое число или число с плавающей запятой.
    Random(1000000) – генерирует целое число от 0 до 999999
    Random() – генерирует число с плавающей точкой от 0 до 1
    RandomRange(X,Y), функция принимает два параметра и возвращает целое число, которое больше Х и меньше Y. Перед использованием нужно подключить библиотеку Math.
    RandomRange(10,100) – генерирует целое число от 10 до 100.
    RandG(X,Y), она также принимает пару входных значений и генерирует псевдослучайное число, используя распределение Гаусса. Для неѐ также необходимо подключить Math.
    RandG(100,10) – сгенерирует число с плавающей точкой от 90 до 110 (то есть в границах от 100-10 до 100+10)
    Простой пример

    Сгенерировать дробное число от 0 до 1 можно следующим образом –
    random(1000000000) / (9999999999)

    получить дробное число от 0 до 100 можно так –
    Random(100)+(random(100000000) / (99999999)

    7
    Задание 5 Тест на основе малой теоремы Ферма
    Для проверки простоты чисел n порядка
    40 30 10 10

    метод пробных делений уже неприменим. Следующий тест основан на малой теореме Ферма: если n простое, то для любого a

    Z выполнено сравнение:
    );
    (modn
    a
    a
    n

    если же при этом (a, n) = 1, то:
    );
    (mod
    1 1
    n
    a
    n


    Поэтому для проверки простоты n необходимо выбрать какое-либо a

    Z и проверить выполнение малой теоремы Ферма за log n арифметических операций (с помощью бинарного возведения в степень в кольце Z/nZ). Если малая теорема Ферма не выполнена, то n является составным числом.
    Если же условия выполнены, то предварительно можно сделать вывод о простоте n, поскольку теорема дает лишь необходимое условие. Этот тест является эффективным для обнаружения составных чисел.
    Например, для 100-значных чисел n вида:



    99 10
    n
    , где
    ,...
    7
    ,
    5
    ,
    3
    ,
    1


    проверялось выполнение теста
    )
    (mod
    1 13 1
    n
    n


    , и первые десять чисел, прошедших этот тест, оказались впоследствии простыми.
    Однако существуют такие большие числа, называемые числами Кармайкла, для которых условия теста Ферма выполняются, тем не менее, эти числа являются составными. Наименьшим числом Кармайкла является число 561, которое образуется произведением простых чисел
    561=3*11*17. Для обнаружения таких чисел имеются специальные алгоритмы, основанные на теоремах Лагранжа, Эллера и ряда других математиков.

    8
    Современные методы
    Ниже рассматривается пример, наглядно демонстрирующий процедуру генерирования простых положительных чисел в выбранном диапазоне значений для типа Integer.
    В примере использованы компоненты SpinEdit 1,2 (для выбора значений диапазона чисел), компонент Memo – для отображения результатов и командная кнопка Button.
    Рис. Расположение элементов в форме
    Функция проверки на простоту числа
    (Так, как функция не декларируется в разделах декларирования то, тело функции
    необходимо располагать в Unit'e выше тела команды теста.)
    {--- функция проверки чисел на их простоту ---}
    {----- возвращает TRUE, если число простое ---}
    {-----------------------------------------------------------}
    function Simple(n:integer):Boolean;
    var k:Boolean; i:integer;
    begin
    k:=true;
    if n<>2 then
    for i:=2 to trunc(sqrt(n))+1 do
    if n mod i = 0 then
    begin
    k := false; break;
    end;
    Result:=k;
    end;
    Команда теста функции
    // Команда вывода простых чисел в диапазоне N:M
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    begin
    Memo1.Clear;
    for i := SpinEdit1.Value to SpinEdit2.Value do
    if Simple(i) = true then Memo1.Lines.Add(IntToStr(i)); end;

    9


    написать администратору сайта