Реализация алгоритма RSA с использованием Python

Dec 09 2022
В этой статье объясняется, что на самом деле представляет собой алгоритм RSA в криптографии, и показано, как реализовать алгоритм RSA для шифрования и дешифрования данных с помощью Python. Здесь данные относятся к числам.

В этой статье объясняется, что на самом деле представляет собой алгоритм RSA в криптографии, и показано, как реализовать алгоритм RSA для шифрования и дешифрования данных с помощью Python. Здесь данные относятся к числам. Вы также можете использовать строковые данные для шифрования и дешифрования с помощью этого алгоритма.

Алгоритм RSA — широко используемый метод шифрования и дешифрования сообщений. Он назван в честь его создателей Рона Ривеста , Ади Шамира и Леонарда Адлемана , которые разработали его в 1977 году . Алгоритм RSA основан на сложности факторизации больших чисел и считается безопасным методом шифрования данных.

Чтобы понять, как работает алгоритм RSA, нам нужно сначала понять концепцию открытых и закрытых ключей. В алгоритме RSA у каждого пользователя есть пара ключей: открытый ключ и закрытый ключ. Открытый ключ предоставляется любому, кто хочет отправить сообщение пользователю, и используется для шифрования сообщения. Закрытый ключ хранится в секрете и используется для расшифровки сообщения.

Вот пример того, как работает алгоритм RSA:

  • Допустим, Гвен хочет отправить сообщение Питеру. Она ищет открытый ключ Питера и использует его для шифрования сообщения.
  • Зашифрованное сообщение отправляется Питеру.
  • Питер использует свой закрытый ключ, чтобы расшифровать сообщение и прочитать его.

Вот как это работает более подробно:

  • Во-первых, Гвен и Питер договорились о двух больших простых числах, p и q.
  • Они используют эти простые числа для вычисления третьего числа, n, которое является произведением p и q. Этот номер обнародован.
  • Они также вычисляют четвертое число, известное как «totient», которое представляет собой количество положительных целых чисел, меньших n, которые взаимно просты с n. Этот номер также обнародован.
  • Гвен и Питер создают секретный ключ, известный как «закрытый ключ». Этот ключ представляет собой число, меньшее, чем тотиент, и взаимно простое с тотиентом.
  • Затем они используют свой закрытый ключ для вычисления своего открытого ключа, который представляет собой число, относительно простое для пользователя. Этот открытый ключ доступен любому, кто хочет отправить сообщение пользователю.

Алгоритм RSA имеет несколько преимуществ. Его относительно просто реализовать, и он широко используется, поскольку считается безопасным методом шифрования данных. Кроме того, алгоритм RSA является алгоритмом «открытого ключа», что означает, что ключи, используемые для шифрования и дешифрования, различны. Это позволяет пользователям общаться без необходимости обмениваться секретными ключами.

Таким образом, алгоритм RSA является широко используемым методом шифрования и дешифрования сообщений. Он основан на сложности факторизации больших чисел и считается безопасным методом шифрования данных. Он имеет несколько преимуществ, в том числе простоту и использование открытого и закрытого ключей.

Весь алгоритм RSA простыми словами,

  1. Выберите p , q ( p и q оба простые и p не равны q )
  2. Вычислить n = p * q
  3. Вычислить totient, t = (p -1) * (q - 1)
  4. Выберите e , используя gcd(t, e) = 1, где 1 < e < t
  5. Рассчитайте d, используя (d * e % t = 1)
  6. Рассмотрим e как открытый ключ и d как закрытый ключ.
  7. Для шифрования Шифрованный текст = (Сообщение ^ e) % n (где Сообщение < n)
  8. Для расшифровки Message = (Cipher Text ^ d) % n

from math import gcd

# defining a function to perform RSA approch
def RSA(p: int, q: int, message: int):
    # calculating n
    n = p * q

    # calculating totient, t
    t = (p - 1) * (q - 1)

    # selecting public key, e
    for i in range(2, t):
        if gcd(i, t) == 1:
            e = i
            break
    
    # selecting private key, d
    j = 0
    while True:
        if (j * e) % t == 1:
            d = j
            break
        j += 1

    # performing encryption
    ct = (message ** e) % n
    print(f"Encrypted message is {ct}")

    # performing decryption
    mes = (ct ** d) % n
    print(f"Decrypted message is {mes}")

# Testcase - 1
RSA(p=53, q=59, message=89)

# Testcase - 2
RSA(p=3, q=7, message=12)

Encrypted message is 1394
Decrypted message is 89

Encrypted message is 3
Decrypted message is 12

Если вы найдете это полезным, поделитесь этим с друзьями и не забудьте подписаться.

Увидимся в другом блоге, а пока пока