File tree 1 file changed +34
-2
lines changed
1 file changed +34
-2
lines changed Original file line number Diff line number Diff line change @@ -17,10 +17,42 @@ def egcd(a, b):
17
17
g , y , x = egcd (b % a , a )
18
18
return (g , x - (b // a ) * y , y )
19
19
20
+ def is_prime (n , k = 5 ):
21
+ if n < 2 :
22
+ return False
23
+ if n in (2 , 3 ):
24
+ return True
25
+ if n % 2 == 0 :
26
+ return False
27
+
28
+ # Записуємо n-1 як 2^s * d
29
+ s , d = 0 , n - 1
30
+ while d % 2 == 0 :
31
+ s += 1
32
+ d //= 2
33
+
34
+ for _ in range (k ):
35
+ a = secrets .randbelow (n - 3 ) + 2 # [2, n-2]
36
+ x = pow (a , d , n )
37
+ if x in (1 , n - 1 ):
38
+ continue
39
+ for _ in range (s - 1 ):
40
+ x = pow (x , 2 , n )
41
+ if x == n - 1 :
42
+ break
43
+ else :
44
+ return False
45
+ return True
46
+
47
+ def generate_prime (bits = 1024 ):
48
+ while True :
49
+ temp = secrets .randbits (bits )
50
+ if is_prime (temp ):
51
+ return temp
52
+
20
53
def rsa_algo ():
21
54
"""RSA"""
22
- # треба чекати чи просте число
23
- num_1 , num_2 = secrets .randbits (1024 ), secrets .randbits (1024 )
55
+ num_1 , num_2 = generate_prime (), generate_prime ()
24
56
n = num_1 * num_2
25
57
26
58
phi = (num_1 - 1 )* (num_2 - 1 )
You can’t perform that action at this time.
0 commit comments