Хелпикс

Главная

Контакты

Случайная статья





Ход работы.



1. Вначале мы импортируем наши модули: random и sympy.

2. Вводим функцию gcd(), которая будет принимать два целых числа: a и b. Напомним, что gcd(НОД) в математике является сокращением от «Наибольший общий делитель» и также называется Наибольшим общим делителем. Это наибольшее положительное целое число, которое делит оба числа, не оставляя дроби. Эта функция просто принимает два целых числа a и b и возвращает НОД.

3. Функция multplicative_inverse() используется для вычисления мультипликативной инверсии, которая является частью нашего закрытого ключа. Мультипликативное обратное определяется как число, которое при умножении на исходное число дает произведение, равное 1.

4. Функция generate_keypair() генерирует открытые и закрытые ключи. Это основной компонент алгоритма RSA. Вот примерный план того, как это делается:

· Функция принимает два случайных простых целых числа p и q. Эти числа должны быть простыми и держаться в секрете.

· Произведение p и q вычисляется как n. Значение n является модулем как открытого, так и закрытого ключа, а также используется в качестве длины ключа. Кроме того, как видно из возвращаемого значения функции generate_keypair(), оно раскрывается как часть открытого ключа.

· Мы вычисляем phi, которая является общей функцией от n, в частности общей функцией Эйлера. Это функция, которая подсчитывает, сколько целых чисел, меньших заданного числа, взаимно просты с ним. Надо помнить, что взаимно простое число относится к двум или более положительным целым числам, у которых нет общих положительных целых делителей, кроме 1. Значение phi также хранится в тайне.

· Мы получаем случайное целое число e такое, что e и phi взаимно просты. Это то, что делает цикл.

· Вычисляем d, который является мультипликативной обратной величиной e и phi. Напомним, что мы определили эту функцию ранее. Переменная d сохраняется как экспонента закрытого ключа.

· Функция вернет пару кортежей, один для нашего открытого ключа и один для нашего закрытого ключа.

· Все вышеперечисленные шаги являются обычными шагами алгоритма RSA.

5. Функция encrypt() примет кортеж pk (который является нашим открытым ключом) и открытый текст для шифрования. Открытый ключ был сгенерирован в generate_keypair() и содержит как целое число e (используемое также в качестве ключа), так и целое число n (модуль). В частности, мы шифруем открытый текст по одному символу за раз, используя формулу ord(char)key mod n. Напомним, что функция ord() возвращает целое число, представляющее символ Юникода. Эта функция вернет наш зашифрованный текст, который является зашифрованным открытым текстом.

6. Функция decrypt() примет кортеж pk (который является нашим закрытым ключом) и зашифрованный зашифрованный текст. Напомним, что наш кортеж закрытого ключа содержит показатель степени закрытого ключа d и целое число по модулю n. Она будет выполнять обратную функцию encrypt(), расшифровывая зашифрованный текст по одному символу за раз и возвращая открытый текст, который является нашей исходной строкой.

7. Мы сгенерируем два наших случайных простых числа p и q, оба между 1 и 100, во время выполнения. Эти значения будут переданы в generate_keypair() и сгенерируют и вернут наши открытый и закрытый ключи, как описано ранее.

8. Нам предлагается ввести текстовое сообщение в качестве ввода.

9. Сообщение будет зашифровано с помощью открытого ключа, а затем расшифровано с помощью закрытого ключа в соответствии с алгоритмом RSA.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.