RSA Verfahren

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

RSA Verfahren

Beitragvon Hopey Levrey » Sonntag 11. Dezember 2016, 11:48

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:
  1. import random
  2. from fractions import gcd
  3.  
  4.  
  5. class RSA_Verschlusselung():
  6.     def __init__(self, p,q):
  7.         self.p=p
  8.         self.q=q
  9.  
  10.     def Alice_1(self):
  11.         self.N= self.p*self.q
  12.         self.m=(self.p-1)*(self.q-1)
  13.         for i in range (2,self.N):
  14.             self.gcd = gcd(self.m,i)
  15.             print i, self.gcd
  16.             if self.gcd == 1:
  17.                 self.a=i
  18.                 print 'p:', self.p, 'q:', self.q, 'N:', self.N, 'a:',self.a, 'm:', self.m
  19.                 return self.a, self.N
  20.  
  21.     def Bob_1(self):
  22.         a, N = self.Alice_1()
  23.         X= random.randint (0,N)
  24.         print  'X:', X
  25.         self.y=(X^a)%N
  26.         print 'Y:', self.y
  27.         return self.y
  28.  
  29.     def Alice_2(self):
  30.         self.y= self.Bob_1()
  31.         for i in range (2,500):
  32.             modInv= (self.a*i) % self.N
  33.             if modInv== 1:
  34.                 self.d=i
  35.                 self.message= (self.y^self.d) % self.N
  36.                 print 'd:', self.d, '\n', 'X:', self.message
  37.                 return self.message
  38.  
  39.  
  40.  
  41. #test
  42. verschl= RSA_Verschlusselung(11,13)
  43. verschl.Alice_2()
Zuletzt geändert von BlackJack am Sonntag 11. Dezember 2016, 14:17, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
パイトン出来ないかもしれない。
Sirius3
User
Beiträge: 5427
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: RSA Verfahren

Beitragvon Sirius3 » Sonntag 11. Dezember 2016, 12:17

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

Re: RSA Verfahren

Beitragvon Hopey Levrey » Sonntag 11. Dezember 2016, 13:34

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:

  1. import random
  2. from fractions import gcd
  3.  
  4.  
  5. class RSA_Verschlusselung():
  6.     def __init__(self, p,q):
  7.         self.p=p
  8.         self.q=q
  9.  
  10.     def Alice_1(self):
  11.         self.N= self.p*self.q
  12.         self.m=(self.p-1)*(self.q-1)
  13.         for i in range (2,self.N):
  14.             self.gcd = gcd(self.m,i)
  15.             print i, self.gcd
  16.             if self.gcd == 1:
  17.                 self.a=i
  18.                 print 'p:', self.p, 'q:', self.q, 'N:', self.N, 'a:',self.a, 'm:', self.m
  19.                 return self.a, self.N
  20.  
  21.     def Bob_1(self):
  22.         a, N = self.Alice_1()
  23.         X= random.randint (0,N)
  24.         print  'X:', X
  25.         self.y=(X^a)%N
  26.         print 'Y:', self.y
  27.         return self.y
  28.  
  29.     def Alice_2(self):
  30.         self.y= self.Bob_1()
  31.         for i in range (2,500):
  32.             modInv= (self.a*i) % self.N
  33.             if modInv== 1:
  34.                 self.d=i
  35.                 self.message= (self.y^self.d) % self.N
  36.                 print 'd:', self.d, '\n', 'X:', self.message
  37.                 return self.message
  38.  
  39.  
  40.  
  41. #test
  42. verschl= RSA_Verschlusselung(11,13)
  43. verschl.Alice_2()
パイトン出来ないかもしれない。
aleph
User
Beiträge: 10
Registriert: Donnerstag 19. Januar 2017, 15:28

Re: RSA Verfahren

Beitragvon aleph » Samstag 21. Januar 2017, 06:16

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

Re: RSA Verfahren

Beitragvon pyHoax » Samstag 21. Januar 2017, 11:42

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

Zurück zu „Wissenschaftliches Rechnen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder