O firma
de securitate a angajat un grup de hackeri sa sparga codul pe care firma ar
intentiona (in cazul in care hackerii esueaza) sa il utilizeze in sistemele
proprii.
Codul utilizeaza o cheie foarte lunga, constituita dintr-o secventa de bytes,
cheie care se schimba saptamanal. Cheia este utilizata pentru a codifica toate
mesajele transmise de firma utilizand operatia XOR (disjunctie exclusiva) byte
cu byte astfel:
Ei = Ki XOR Ci,
unde Ei este al i-lea
byte din mesajul codificat, Ki
este al i-lea byte al cheii,
iar Ci este al i-lea
byte din mesajul original.
Hackerii nu au reusit sa
determine cheia, dar au gasit un functionar de la departamentul transmisiuni
care, pentru o sticla de palinca si 3 caltabosi, a fost de acord sa faca un
lucru aparent nevinovat - a codificat un mesaj de doua ori: mai intai a codificat
mesajul original, apoi a codificat mesajul original precedat de un caracter
spatiu. Apoi a transmis ambele codificari.
Cerinta
Scrieti un program care, cunoscand
mesajul original codificat (de lungime N
bytes), precum si mesajul original precedat de un spatiu codificat (de lungime
N+1 bytes), determina cei N+1
bytes din care este constituita cheia de codificare.
Date de
intrare
Fisierul de intrare
cod.in contine doua linii. Pe
prima linie se afla 2N caractere,
reprezentand in ordine cei N
bytes ai mesajului original codificat. Cea de a doua linie contine 2N+2
caractere, reprezentand cei N+1
bytes ai mesajului precedat de spatiu codificat. Fiecare byte este specificat
prin doua caractere din multimea {'0','1',...,'9','A',
...,'F'} ce reprezinta scrierea in baza 16 a continutului acelui byte.
Date de
iesire
Fisierul de iesire
cod.out va contine o singura
linie ce va contine 2N+2 caractere,
care reprezinta cei N+1 bytes
ai cheii (specificata de asemenea in format hexazecimal ca si in fisierul de
intrare).