Implementacja algorytmu RSA przy użyciu Pythona

Dec 09 2022
Ten artykuł wyjaśnia, czym właściwie jest algorytm RSA w kryptografii i pokazuje, jak zaimplementować algorytm RSA do szyfrowania i deszyfrowania danych za pomocą Pythona. Tutaj dane odnoszą się do liczb.

Ten artykuł wyjaśnia, czym właściwie jest algorytm RSA w kryptografii i pokazuje, jak zaimplementować algorytm RSA do szyfrowania i deszyfrowania danych za pomocą Pythona. Tutaj dane odnoszą się do liczb. Za pomocą tego algorytmu można również użyć danych łańcuchowych do szyfrowania i deszyfrowania.

Algorytm RSA jest szeroko stosowaną metodą szyfrowania i deszyfrowania wiadomości. Został nazwany na cześć jego twórców, Rona Rivesta , Adi Shamira i Leonarda Adlemana , którzy opracowali go w 1977 roku . Algorytm RSA opiera się na trudności rozkładu dużych liczb na czynniki i jest powszechnie uważany za bezpieczną metodę szyfrowania danych.

Aby zrozumieć, jak działa algorytm RSA, musimy najpierw zrozumieć koncepcję kluczy publicznych i prywatnych. W algorytmie RSA każdy użytkownik ma parę kluczy: klucz publiczny i klucz prywatny. Klucz publiczny jest udostępniany każdemu, kto chce wysłać wiadomość do użytkownika i służy do szyfrowania wiadomości. Klucz prywatny jest utrzymywany w tajemnicy i służy do odszyfrowania wiadomości.

Oto przykład działania algorytmu RSA:

  • Powiedzmy, że Gwen chce wysłać wiadomość do Piotra. Wyszukuje klucz publiczny Petera i używa go do zaszyfrowania wiadomości.
  • Zaszyfrowana wiadomość jest wysyłana do Piotra.
  • Peter używa swojego klucza prywatnego do odszyfrowania wiadomości i przeczytania jej.

Oto jak to działa bardziej szczegółowo:

  • Po pierwsze, Gwen i Peter zgadzają się co do dwóch dużych liczb pierwszych, p i q.
  • Używają tych liczb pierwszych do obliczenia trzeciej liczby, n, która jest iloczynem p i q. Ten numer jest upubliczniony.
  • Obliczają również czwartą liczbę, znaną jako „totient”, czyli liczbę dodatnich liczb całkowitych mniejszych od n, które są względnie pierwsze z n. Ten numer jest również upubliczniony.
  • Gwen i Peter generują tajny klucz, zwany „kluczem prywatnym”. Ten klucz jest liczbą mniejszą niż totient i jest względnie pierwszą względem totienta.
  • Następnie używają swojego klucza prywatnego do obliczenia klucza publicznego, który jest liczbą względnie pierwszą dla totienta. Ten klucz publiczny jest udostępniany każdemu, kto chce wysłać wiadomość do użytkownika.

Algorytm RSA ma kilka zalet. Jest stosunkowo prosty do wdrożenia i jest szeroko stosowany, ponieważ jest uważany za bezpieczną metodę szyfrowania danych. Dodatkowo algorytm RSA jest algorytmem „klucza publicznego”, co oznacza, że ​​klucze używane do szyfrowania i deszyfrowania są różne. Dzięki temu użytkownicy mogą komunikować się bez konieczności wymiany tajnych kluczy.

Podsumowując, algorytm RSA jest szeroko stosowaną metodą szyfrowania i deszyfrowania wiadomości. Opiera się na trudności rozłożenia dużych liczb na czynniki i jest uważana za bezpieczną metodę szyfrowania danych. Ma kilka zalet, w tym prostotę i wykorzystanie kluczy publicznych i prywatnych.

Cały algorytm RSA w prostych słowach,

  1. Wybierz p , q ( p i q zarówno liczby pierwsze, jak i p nie równe q )
  2. Oblicz n = p * q
  3. Oblicz totient, t = (p -1) * (q — 1)
  4. Wybierz e używając gcd(t, e) = 1 gdzie 1 < e < t
  5. Oblicz d za pomocą (d * e % t = 1)
  6. Rozważ e jako klucz publiczny , a d jako klucz prywatny.
  7. W przypadku szyfrowania tekst zaszyfrowany = (wiadomość ^ e) % n (gdzie, wiadomość < n)
  8. Do odszyfrowania Wiadomość = (Tekst zaszyfrowany ^ 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

Jeśli uznasz to za przydatne, podziel się tym ze znajomymi i nie zapomnij obserwować.

Do zobaczenia na innym blogu, a do tego czasu pa