Seite 1 von 1

RSA Verfahren

Verfasst: Sonntag 11. Dezember 2016, 11:48
von Hopey Levrey
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()

Re: RSA Verfahren

Verfasst: Sonntag 11. Dezember 2016, 12:17
von Sirius3
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.

Re: RSA Verfahren

Verfasst: Sonntag 11. Dezember 2016, 13:34
von Hopey Levrey
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]

Re: RSA Verfahren

Verfasst: Samstag 21. Januar 2017, 06:16
von aleph

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.

Re: RSA Verfahren

Verfasst: Samstag 21. Januar 2017, 11:42
von pyHoax
Tip: x**a % N = pow(x,a,N)