Skip to content

Commit 178429d

Browse files
committed
RSA Assignment done
1 parent b0c7a53 commit 178429d

9 files changed

+376
-18
lines changed

RSA.py

+3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ def decrypt(ciphertext, private_key):
4545
return pow(ciphertext, d, n)
4646

4747

48+
49+
50+
4851

4952

5053

__pycache__/RSA.cpython-310.pyc

0 Bytes
Binary file not shown.

__pycache__/attack.cpython-310.pyc

131 Bytes
Binary file not shown.

__pycache__/encode.cpython-310.pyc

-179 Bytes
Binary file not shown.

analysis.txt

+187
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
key size : 10
2+
public-key : (902491, 348575) privat-key : (902491, 322495)
3+
p = 947, q = 953
4+
elapsed time in seconds : 0.0
5+
elapsed time in millis : 0.0
6+
7+
8+
9+
key size : 16
10+
public-key : (2642477857, 1265573083) privat-key : (2642477857, 2252936275)
11+
p = 42979, q = 61483
12+
elapsed time in seconds : 0.002008676528930664
13+
elapsed time in millis : 2.008676528930664
14+
15+
16+
17+
key size : 18
18+
public-key : (47617092521, 14320479377) privat-key : (47617092521, 32045521313)
19+
p = 189061, q = 251861
20+
elapsed time in seconds : 0.009698629379272461
21+
elapsed time in millis : 9.698629379272461
22+
23+
24+
25+
key size : 20
26+
public-key : (784019840237, 198805651261) privat-key : (784019840237, 295459558741)
27+
p = 753937, q = 1039901
28+
elapsed time in seconds : 0.03756880760192871
29+
elapsed time in millis : 37.56880760192871
30+
31+
32+
33+
key size : 22
34+
public-key : (10421475884581, 8696663147501) privat-key : (10421475884581, 6003437762501)
35+
p = 2921881, q = 3566701
36+
elapsed time in seconds : 0.13872957229614258
37+
elapsed time in millis : 138.72957229614258
38+
39+
40+
41+
key size : 25
42+
public-key : (946716258816971, 545388499047137) privat-key : (946716258816971, 376041806557073)
43+
p = 29831251, q = 31735721
44+
elapsed time in seconds : 1.2338147163391113
45+
elapsed time in millis : 1233.8147163391113
46+
47+
48+
49+
key size : 28
50+
public-key : (24603353035909763, 14478669589360547) privat-key : (24603353035909763, 10831746275624075)
51+
p = 153659489, q = 160116067
52+
elapsed time in seconds : 6.336149454116821
53+
elapsed time in millis : 6336.149454116821
54+
55+
56+
57+
key size : 32
58+
public-key : (14246847052689561949, 10949044431661252097) privat-key : (14246847052689561949, 13004539113946266529)
59+
p = 3762658937, q = 3786377477
60+
elapsed time in seconds : 446.19090962409973
61+
elapsed time in millis : 446190.90962409973
62+
63+
64+
65+
key size : 40
66+
public-key : (825483459607626169277311, 319767073053179790445503) privat-key : (825483459607626169277311, 254702652909478219664855)
67+
key size : 10
68+
public-key : (743623, 600085) privat-key : (743623, 263485)
69+
p = 769, q = 967
70+
elapsed time in seconds : 0.0
71+
elapsed time in millis : 0.0
72+
73+
74+
75+
key size : 16
76+
public-key : (2017817099, 709311317) privat-key : (2017817099, 63803261)
77+
p = 33623, q = 60013
78+
elapsed time in seconds : 0.0009968280792236328
79+
elapsed time in millis : 0.9968280792236328
80+
81+
82+
83+
key size : 18
84+
public-key : (47166592273, 5999125695) privat-key : (47166592273, 8662043647)
85+
p = 204797, q = 230309
86+
elapsed time in seconds : 0.0009984970092773438
87+
elapsed time in millis : 0.9984970092773438
88+
89+
90+
91+
key size : 32
92+
public-key : (11990527668175734437, 6195419166406404473) privat-key : (11990527668175734437, 4894746779823798149)
93+
p = 2923200079, q = 4101849803
94+
elapsed time in seconds : 76.08574795722961
95+
elapsed time in millis : 76085.74795722961
96+
97+
98+
99+
key size : 32
100+
public-key : (9926222261004379711, 3836609441014535959) privat-key : (9926222261004379711, 4627215299831465239)
101+
key size : 32
102+
public-key : (14238204166198454089, 9303464981316445263) privat-key : (14238204166198454089, 64850726580852727)
103+
104+
key size : 12
105+
public-key : (8639017, 1137621) privat-key : (8639017, 4102781)
106+
p = 2297, q = 3761
107+
elapsed time in seconds : 0.0
108+
elapsed time in millis : 0.0
109+
110+
111+
112+
113+
114+
115+
key size : 32
116+
public-key : (6423995158367287661, 6127538426240591497) privat-key : (6423995158367287661, 2617171003697518609)
117+
p = 2347102867, q = 2736989183
118+
elapsed time in seconds : 163.0267264842987
119+
elapsed time in millis : 163026.7264842987
120+
121+
122+
123+
key size : 64
124+
public-key : (198436259214226515391128823914041661299, 65338195688824157030024113761226072207) privat-key : (198436259214226515391128823914041661299, 148297111464704979572992198162264177783)
125+
key size : 4
126+
public-key : (143, 37) privat-key : (143, 13)
127+
p = 11, q = 13
128+
elapsed time in seconds : 0.0
129+
elapsed time in millis : 0.0
130+
131+
132+
133+
key size : 8
134+
public-key : (45173, 32335) privat-key : (45173, 27931)
135+
p = 199, q = 227
136+
elapsed time in seconds : 0.0
137+
elapsed time in millis : 0.0
138+
139+
140+
141+
key size : 16
142+
public-key : (2268407909, 1447861217) privat-key : (2268407909, 159640769)
143+
p = 42013, q = 53993
144+
elapsed time in seconds : 0.0010137557983398438
145+
elapsed time in millis : 1.0137557983398438
146+
147+
148+
149+
key size : 32
150+
public-key : (8944826213746341719, 3797629572260163775) privat-key : (8944826213746341719, 3222217923646639159)
151+
p = 2351798723, q = 3803397853
152+
elapsed time in seconds : 139.40818691253662
153+
elapsed time in millis : 139408.18691253662
154+
155+
156+
157+
key size : 4
158+
public-key : (143, 23) privat-key : (143, 47)
159+
key size : 4
160+
public-key : (143, 53) privat-key : (143, 77)
161+
p = 11, q = 13
162+
elapsed time in seconds : 0.0
163+
elapsed time in millis : 0.0
164+
165+
166+
167+
key size : 8
168+
public-key : (24287, 6191) privat-key : (24287, 8063)
169+
p = 149, q = 163
170+
elapsed time in seconds : 0.0
171+
elapsed time in millis : 0.0
172+
173+
174+
175+
key size : 16
176+
public-key : (2275601711, 175190605) privat-key : (2275601711, 106101133)
177+
p = 35899, q = 63389
178+
elapsed time in seconds : 0.0009968280792236328
179+
elapsed time in millis : 0.9968280792236328
180+
181+
182+
183+
key size : 32
184+
public-key : (12810341050435700243, 2792670548996849653) privat-key : (12810341050435700243, 454092922367283037)
185+
186+
key size : 64
187+
public-key : (206544077828077332856880615690492300807, 184739458942775129792177196144810553645) privat-key : (206544077828077332856880615690492300807, 194241859593344560252303362061616125669)

breakRSA.py

+36-14
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,36 @@
1-
def common_modulus_attack(ciphertext1, ciphertext2, public_key):
2-
n, e = public_key
3-
gcd, s1, s2 = extended_gcd(ciphertext1, ciphertext2)
4-
if gcd != 1:
5-
return None
6-
elif s1 < 0:
7-
ciphertext1 = pow(pow(ciphertext1, -s1, n), -1, n)
8-
else:
9-
ciphertext1 = pow(ciphertext1, s1, n)
10-
if s2 < 0:
11-
ciphertext2 = pow(pow(ciphertext2, -s2, n), -1, n)
12-
else:
13-
ciphertext2 = pow(ciphertext2, s2, n)
14-
return (ciphertext1 * ciphertext2) % n
1+
import RSA as RSA
2+
import math
3+
import time
4+
5+
6+
def factorize(n):
7+
for i in range(3,int(math.sqrt(n))+1,2):
8+
if n % i == 0:
9+
return i, n // i
10+
return None
11+
12+
13+
14+
key_sizes = [2**i for i in range(2,7)]
15+
16+
for key_size in key_sizes:
17+
with open("analysis.txt", "a") as file:
18+
# Write some text to the file
19+
file.write(f"key size : {key_size} \n")
20+
21+
pub , prv=RSA.generate_keys(key_size)
22+
file.write(f"public-key : {pub} privat-key : {prv} \n")
23+
24+
t1 = time.time()
25+
p, q = factorize(pub[0])
26+
t2 = time.time()
27+
28+
file.write(f"p = {p}, q = {q}\n")
29+
file.write(f"elapsed time in seconds : {(t2-t1)} \n")
30+
file.write(f"elapsed time in millis : {(t2-t1)*1000} \n")
31+
file.write("\n\n\n")
32+
33+
34+
35+
36+

eff.ipynb

+145
Large diffs are not rendered by default.

encode.py

-4
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ def encode(message):
3131
for i, c in enumerate(group):
3232
num += dict[c] * (37 ** (4 - i))
3333
numbers.append(num)
34-
35-
# Concatenate the resulting numbers to form the encoded message
36-
encoded_message = ''.join(str(num) for num in numbers)
37-
3834
# return encoded_message
3935
return numbers
4036

server.py

+5
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@
5959
print(f"Received message from client : {messageReceived}")
6060

6161

62+
63+
64+
65+
66+
6267
# close the connection
6368
client_socket.close()
6469
server_socket.close()

0 commit comments

Comments
 (0)