RSA Verfahren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Hopey Levrey
User
Beiträge: 4
Registriert: Donnerstag 30. Juni 2016, 15:58

Hallo, Community

Ich habe ein Programm zum RSA- Verschlüsselungsverfahren geschrieben. Aus irgendeinem Grund wird das e (in meinem Code: a) aber immer falsch berechnet und ich weiß nicht, woran es liegt.
Irgendwelche Ideen?

Script:

Code: Alles auswählen

import random
from fractions import gcd


class RSA_Verschlusselung():
    def __init__(self, p,q):
        self.p=p
        self.q=q

    def Alice_1(self):
        self.N= self.p*self.q
        self.m=(self.p-1)*(self.q-1)
        for i in range (2,self.N):
            self.gcd = gcd(self.m,i) 
            print i, self.gcd
            if self.gcd == 1:
                self.a=i
                print 'p:', self.p, 'q:', self.q, 'N:', self.N, 'a:',self.a, 'm:', self.m
                return self.a, self.N

    def Bob_1(self):
        a, N = self.Alice_1()
        X= random.randint (0,N)
        print  'X:', X
        self.y=(X^a)%N
        print 'Y:', self.y
        return self.y

    def Alice_2(self):
        self.y= self.Bob_1()
        for i in range (2,500):
            modInv= (self.a*i) % self.N
            if modInv== 1:
                self.d=i
                self.message= (self.y^self.d) % self.N
                print 'd:', self.d, '\n', 'X:', self.message
                return self.message



#test
verschl= RSA_Verschlusselung(11,13)
verschl.Alice_2()
Zuletzt geändert von Anonymous am Sonntag 11. Dezember 2016, 14:17, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
パイトン出来ないかもしれない。
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo Hopey Levrey,

Einrückungen sind in Python syntaktisch wichtig. Um sie zu erkennen gibt es hier im Forum Code-Blocks (Dropdown »Code auswählen« über dem Editfeld. Die Einrückungen in Deinem Code sind sicher nicht so, wie Du sie willst. Dann hilft es auch, den Algorithmus mit Papier und Bleistift durchzugehen und mit den print-Ausgaben zu vergleichen.
Hopey Levrey
User
Beiträge: 4
Registriert: Donnerstag 30. Juni 2016, 15:58

Sirius3 hat geschrieben:Hallo Hopey Levrey,

Einrückungen sind in Python syntaktisch wichtig. Um sie zu erkennen gibt es hier im Forum Code-Blocks (Dropdown »Code auswählen« über dem Editfeld. Die Einrückungen in Deinem Code sind sicher nicht so, wie Du sie willst. Dann hilft es auch, den Algorithmus mit Papier und Bleistift durchzugehen und mit den print-Ausgaben zu vergleichen.
Danke, hier der richtige Code:

[codebox=python file=Unbenannt.txt]import random
from fractions import gcd


class RSA_Verschlusselung():
def __init__(self, p,q):
self.p=p
self.q=q

def Alice_1(self):
self.N= self.p*self.q
self.m=(self.p-1)*(self.q-1)
for i in range (2,self.N):
self.gcd = gcd(self.m,i)
print i, self.gcd
if self.gcd == 1:
self.a=i
print 'p:', self.p, 'q:', self.q, 'N:', self.N, 'a:',self.a, 'm:', self.m
return self.a, self.N

def Bob_1(self):
a, N = self.Alice_1()
X= random.randint (0,N)
print 'X:', X
self.y=(X^a)%N
print 'Y:', self.y
return self.y

def Alice_2(self):
self.y= self.Bob_1()
for i in range (2,500):
modInv= (self.a*i) % self.N
if modInv== 1:
self.d=i
self.message= (self.y^self.d) % self.N
print 'd:', self.d, '\n', 'X:', self.message
return self.message



#test
verschl= RSA_Verschlusselung(11,13)
verschl.Alice_2()[/code]
パイトン出来ないかもしれない。
aleph
User
Beiträge: 20
Registriert: Donnerstag 19. Januar 2017, 15:28

Code: Alles auswählen

        self.y=(X^a)%N
Verwendet Python da die Square-and-Multiply modulare Exponentiation? Wenn nicht, ist das für große p,q extrem langsam.
Benutzeravatar
pyHoax
User
Beiträge: 84
Registriert: Donnerstag 15. Dezember 2016, 19:17

Tip: x**a % N = pow(x,a,N)
Antworten