Diffie-Hellman key generation in Python
In this code, I used math class only. here I implement Deffie-Hellman algorithm for produce public and private keys for Alice and Bob.
This program was written by Shooresh Sufiye. you can copy and change it, But don't forget to mention the source.
This program was written by Shooresh Sufiye. you can copy and change it, But don't forget to mention the source.
# Written by Shooresh Sufiye import random from math import * class DH: sharedSec=None def __init__(self): self.cal() def gimmi(self, v): p = int(random.random() *1000000) p1 = p+100 if(p>p1): p,p1=p1,p primesList=[] primesList = [i for i in range(p,p1) if ((len(primesList)<=5) and self.isPrime(i))] p=random.choice(primesList) primesList.remove(p) P = p return P def isPrime(self, a): isp = None b=int(sqrt(a)) # should change to stave alg or better while(b>1): if(a%b==0): isp = False b=-1 break else: b-=1 if(b!=-1): isp = True print(".", end='') return isp def gen(self, p): # set of g for all integer values. The order # of g is the smallest k≥1k≥1 such that g^k = 1 mod pgk=1 mod p. primitives=[1,2,3,4,5,6,7,9,10,11,13,14,17,18,19,22,23,25,26, 27,29,31,34,37,38,41,43,46,47,49,50,53,54,58,59, 61,62,67,71,73,74,79,81,82,83,86,89,94,97,98,101, 103,106,107,109,113,118,121,122,125,127,131,134, 137,139] j=0 for i in range(p): if(self.isPrime(i)): j+=1 pr = primitives[j] #print(len(primitives)) return pr def cal(self): print("This program only works for P<=300 !\n", 30*"=","\n") print("Enter chosen number P ",end='') p=input() P = int(p) G = self.gen(int(P)) print("\nG: ", G) A = int(random.random()*100) AliceK1 = (G ** A) % P B = int(random.random()*100) BobK1 = (G ** B) % P print("Alice key:", A,"\n Bob\'s key: ", B) self.sharedSec = (G ** (A*B)) % P print("shared secret key: ", self.sharedSec) dhkey = DH() dhkey.sharedSec input("\nPress enter exit?") |
Comments
Post a Comment