/
keyGenerator.py
74 lines (57 loc) · 1.43 KB
/
keyGenerator.py
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import random
import math
import Key
def generateKeys(prime1, prime2):
n = prime1 * prime2
fi = (prime1-1)*(prime2-1)
e, d = findED(fi)
#print(prime1, " ", prime2)
#print("n=", n)
#print("fi=", fi)
#print("e=", e)
#print("d=", d)
publica = Key.Key()
publica.exponent = int(e)
publica.modul = int(n)
privata = Key.Key()
privata.exponent = int(d)
privata.modul = int(n)
return privata, publica
def findNearPrime(number):
if checkIfPrime(number):
return number
for i in range(number):
if checkIfPrime(abs(number - i)):
return abs(number - i)
if checkIfPrime(number + i):
return number + 1
def findED(fi):
d = 1
while d == 1:
eps = generateRandomNumber(fi)
while gcd(eps, fi) != 1:
eps = generateRandomNumber(fi)
d = modInverse(eps, fi)
return eps, d
def generateRandomNumber(maxValue):
return random.randint(0, maxValue)
def checkIfPrime(n):
j = 2
while j <= math.sqrt(n):
if n % j == 0:
return False
j += 1
return True
def gcd(number1, number2):
while number1 != number2:
if number1 > number2:
number1 = number1-number2
else:
number2 = number2 - number1
return number1
def modInverse(a, m):
a = a % m
for x in range(1, m):
if ((a * x) % m == 1):
return x
return 1