import socket
import json
import re
HOST = 'tasks.duckerz.ru'
PORT = 30009
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(15.0)
s.connect((HOST, PORT))
data = b""
try:
while b"Send to Bob:" not in data:
chunk = s.recv(4096)
if not chunk:
break
data += chunk
except socket.timeout:
pass
text = data.decode('utf-8', errors='ignore')
match = re.search(r'\{.*\}', text)
alice = json.loads(match.group())
p = int(alice['p'], 16)
g = int(alice['g'], 16)
A = int(alice['A'], 16)
print(f"[*] p = {p} ({p.bit_length()} бит)")
print(f"[*] g = {g}")
print(f"[*] A = {A}")
# Факторизация p
print("[*] Факторизуем p...")
n = p
factors = []
temp = n
for i in range(2, 1000000):
while temp % i == 0:
factors.append(i)
temp //= i
if i % 100000 == 0:
print(f"[*] Проверено до {i}...")
if temp > 1:
factors.append(temp)
print(f"[!] Остаток: {temp} ({temp.bit_length()} бит)")
print(f"[*] Множители p: {factors}")
print(f"[*] Всего множителей: {len(factors)}")
if len(factors) > 1:
print("[+] p СОСТАВНОЕ! Можно применить CRT для решения DLP!")
else:
print("[-] p простое. DLP нерешаем.")
s.close()