Implementieren des RSA-Algorithmus mit Python
Dieser Artikel erklärt, was eigentlich der RSA-Algorithmus in der Kryptografie ist und zeigt, wie man den RSA-Algorithmus zur Ver- und Entschlüsselung von Daten mit Python implementiert. Daten beziehen sich hier auf Zahlen. Sie können mit diesem Algorithmus auch Zeichenfolgendaten zur Verschlüsselung und Entschlüsselung verwenden.
Der RSA-Algorithmus ist ein weit verbreitetes Verfahren zum Verschlüsseln und Entschlüsseln von Nachrichten. Es ist nach seinen Schöpfern Ron Rivest , Adi Shamir und Leonard Adleman benannt, die es 1977 entwickelt haben . Der RSA-Algorithmus basiert auf der Schwierigkeit, große Zahlen zu faktorisieren, und gilt weithin als sichere Methode zur Verschlüsselung von Daten.
Um zu verstehen, wie der RSA-Algorithmus funktioniert, müssen wir zunächst das Konzept der öffentlichen und privaten Schlüssel verstehen. Beim RSA-Algorithmus hat jeder Benutzer ein Schlüsselpaar: einen öffentlichen Schlüssel und einen privaten Schlüssel. Der öffentliche Schlüssel wird jedem zur Verfügung gestellt, der eine Nachricht an den Benutzer senden möchte, und er wird verwendet, um die Nachricht zu verschlüsseln. Der private Schlüssel wird geheim gehalten und zum Entschlüsseln der Nachricht verwendet.
Hier ist ein Beispiel dafür, wie der RSA-Algorithmus funktioniert:
- Nehmen wir an, Gwen möchte Peter eine Nachricht senden. Sie schlägt Peters öffentlichen Schlüssel nach und verwendet ihn, um die Nachricht zu verschlüsseln.
- Die verschlüsselte Nachricht wird an Peter gesendet.
- Peter verwendet seinen privaten Schlüssel, um die Nachricht zu entschlüsseln und zu lesen.
So funktioniert es im Detail:
- Zunächst einigen sich Gwen und Peter auf zwei große Primzahlen, p und q.
- Sie verwenden diese Primzahlen, um eine dritte Zahl, n, zu berechnen, die das Produkt von p und q ist. Diese Nummer wird öffentlich gemacht.
- Sie berechnen auch eine vierte Zahl, bekannt als „Totient“, die die Anzahl der positiven ganzen Zahlen kleiner als n ist, die teilerfremd zu n sind. Diese Nummer wird auch veröffentlicht.
- Gwen und Peter generieren jeweils einen geheimen Schlüssel, der als „privater Schlüssel“ bekannt ist. Dieser Schlüssel ist eine Zahl, die kleiner ist als der Totient und teilerfremd zum Totient ist.
- Sie verwenden dann ihren privaten Schlüssel, um ihren öffentlichen Schlüssel zu berechnen, der eine Zahl ist, die relativ teilerfremd zum Totient ist. Dieser öffentliche Schlüssel wird jedem zur Verfügung gestellt, der eine Nachricht an den Benutzer senden möchte.
Der RSA-Algorithmus hat mehrere Vorteile. Es ist relativ einfach zu implementieren und wird häufig verwendet, da es als sichere Methode zur Verschlüsselung von Daten gilt. Außerdem ist der RSA-Algorithmus ein „Public-Key“-Algorithmus, was bedeutet, dass die für die Verschlüsselung und Entschlüsselung verwendeten Schlüssel unterschiedlich sind. Dies ermöglicht es Benutzern zu kommunizieren, ohne geheime Schlüssel austauschen zu müssen.
Zusammenfassend ist der RSA-Algorithmus ein weit verbreitetes Verfahren zum Verschlüsseln und Entschlüsseln von Nachrichten. Es basiert auf der Schwierigkeit, große Zahlen zu faktorisieren, und gilt als sichere Methode zur Verschlüsselung von Daten. Es hat mehrere Vorteile, darunter seine Einfachheit und die Verwendung öffentlicher und privater Schlüssel.
Der gesamte RSA-Algorithmus in einfachen Worten,
- Wählen Sie p , q ( p und q sind beide Primzahlen und p ungleich q )
- Berechnen Sie n = p * q
- Totient berechnen, t = (p -1) * (q — 1)
- Wählen Sie e mit ggT(t, e) = 1 aus, wobei 1 < e < t
- Berechnen Sie d mit (d * e % t = 1)
- Betrachten Sie e als öffentlichen Schlüssel und d als privaten Schlüssel.
- Für die Verschlüsselung, Cipher Text = (Message ^ e) % n (wobei, Message < n)
- Für die Entschlüsselung 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
Wenn Sie es nützlich finden, teilen Sie es mit Ihren Freunden und vergessen Sie nicht, ihm zu folgen.
Wir sehen uns in einem anderen Blog bis dahin tschüss

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































