Another day has passed and I still haven't used y=mx+q
La challenge cifra la flag utilizzando un cifrario affine in cui la chiave è il moltiplicatore.
Se
Possiamo recuperare la flag in due modi: il primo è facendo un bruteforce sulla chiave. Nel sorgente è generata come un intero a 128 bit, ma possiamo osservare che quello che interessa davvero è il valore di
Tuttavia, poiché conosciamo una parte della flag, in particolare l'inizio flag{
, possiamo recuperare il valore preciso di a
. Una volta ottenuto il valore di
from Crypto.Util.number import inverse
data = bytes.fromhex("7f1d26c428628a1dd436311d36b0054536f1a79c62f1f59c7b4a8ffc9ca7f19c31bbf16b1dc062e6b2")
k = ((data[2]-1) * inverse(ord("a"), 256)) % 256
dec = lambda x: ((x-1) * inverse(k, 256)) % 256
flag = bytes(map(dec, data))
print(flag)