1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| from random import *
class Alice:
def __init__(self, p, g):
self.p = p
self.g = g
self.a = randint(0, p-2)
print str(self.a)
#Calcul de A:
self.A = (self.g**self.a)%self.p
def decrypt(self, C, B):
self.M = B**(self.p-1-self.a)*C%self.p
return self.M
class Bob:
def __init__(self, p, g, A):
self.p = p
self.g = g
self.A = A
self.b = randint(0, p-2)
self.B = (self.g**self.b)%self.p
def crypt(self, M):
self.C = ((self.A**self.b)*M)%self.p
return self.C
#p et g sont connus (nombre premier et sa racine):
#p = 13
#g = 2
alice = Alice(97, 5)
bob = Bob(97, 5, alice.A)
print str(bob.crypt(11))
print str(alice.decrypt(bob.C, bob.b)) |
Partager