programmgesteuert generieren `d` von `p` und `q` (RSA)
Ich habe zwei zahlen, die p
, und q
. Ich weiß, dass ich phi = (p-1)*(q-1)
und dass ed = 1 (mod phi)
... aber ich bin mir nicht sicher, dass ich bekommen, was dies bedeutet.
Schrieb ich einige Python:
p = NUM
q = NUM
e = NUM
phi = (p-1)*(q-1)
d = (1 % phi)/float(e)
Aber ich bekomme immer eine Dezimalzahl, und die d
soll eine ganze Zahl sein. was mache ich falsch?
EDIT: ich kann einfach nicht verstehen, RSA. Jetzt bin ich auf der Suche auf diese Seite: http://www.di-mgt.com.au/rsa_alg.html
(1 mode phi)
? dies ist keine gültige Python - meinst du(1 % phi)
?- ich bitte um Entschuldigung, ja. Ich vertippt.
- Sie können jederzeit Bearbeiten, auf Ihre Frage. 🙂
- und ich habe 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein Verständnis für die Mathematik falsch ist. Die Gleichung
bedeutet, dass die restliche Anzahl ed Aufteilung φ ist gleich 1, D. H. in Bezug auf Python,
Zum Beispiel, wenn φ = (7 - 1)(11 - 1) = 60, und e = 17, dann, wenn wir wählen d = 53, dann bekommen wir
Nennen wir d eine modulare multiplikative inverse von e.
Generieren d von e und φ, in der Regel erweiterten euklidischen Algorithmus verwendet. Bitte Lesen Sie http://en.wikipedia.org/wiki/Modular_multiplicative_inverse oder https://stackoverflow.com/search?q=python+%22multiplicative+inverse%22&submit=suchen für mehr info
gcd(e, phi)
, richtig?1L
- was bedeutet das?pow
?Da die dnominator auf die division ein "float", Python wird immer fördern, das Ergebnis der division auf einen Fließkomma -.
Wenn Sie wollen explictely haben das Ergebnis als integer, fördern nicht eine von den Betreibern frei, und verwenden Sie die "//" - operator statt - es verhindert, in eine "Zukunft kompatibel" Möglichkeit, die automatische Konvertierung der division Ergebnis zu einem float.
d = (1 % phi)//e
Er zurückkehrte, dezimal -, weil Sie die Aufteilung, indem Sie eine floating-point-Zahl
Erhalten Sie die endgültige Zahl umgewandelt werden in eine ganze Zahl, indem er die ganze Berechnung in ein int () - Funktion wie diese :
0
, da1 % big_number == 1
und dannint(1/other number) == 0