În acest repository voi păstra notițele mele pentru laboratorul de criptografie de la UPB.
Intenția este să grupez conținutul pe grade de dificultate, astfel încît să fie potrivit atît pentru studenții mai avansați, cît și pentru cei începători.
PRECIZARE IMPORTANTĂ 1: În primul rînd, acesta nu este un laborator de programare! De aceea, scopul principal va fi de a pune bazele matematice ale conceptelor utile în criptografie. În acest sens, implementarea într-un limbaj de programare și cu atît mai puțin optimizarea NU vor constitui decît bonusuri, nu cerințe strict necesare! Pentru nota maximă, studenții pot alege oricare dintre variantele:
- să poată rezolva de mînă probleme aritmetice cu numere mici, relevante pentru criptografie;
- să poată scrie în pseudocod sau să descrie algoritmi care să rezolve probleme matematice relevante pentru criptografie;
- să realizeze un proiect pe una dintre temele propuse, să prezinte progresul pe parcursul semestrului și să susțină o prezentare finală.
Implementarea funcțională și, eventual, optimizată într-un limbaj de programare, însoțită de explicații, aduce bonusuri.
PRECIZARE IMPORTANTĂ 2: Nu există restricții privitoare la software-ul și hardware-ul folosit, de la sistem de operare, la editor text, limbaj de programare, servicii online, documentație etc. Singura cerință este ca studentul să-și însușească soluția propusă și deci să o poată explica la cerere, profesorului sau colegilor.
PRECIZARE IMPORTANTĂ 3: Nu se cer cunoștințe privitoare la git
și GitHub sau controlul versiunilor. Este doar forma preferată de mine pentru organizarea și distribuirea materialelor. Studenții pot accesa liber toate fișierele, le pot descărca și distribui oricum doresc, iar temele le pot încărca într-un cloud.
Ca bonus, dacă studenții preferă, își pot face o ramură (branch) cu numele fiecăruia, pe care să încarce contribuțiile la laborator (teme).
PRECIZARE IMPORTANTĂ 4: Soluțiile la acest laborator le voi da în Python și uneori în C sau C++. Pentru studenții avansați, care preferă Python, recomand soluțiile folosind Jupyter notebook. Puteți găsi cîteva indicații de instalare și utilizare aici.
Extra: Încerc să țin documentația și pe Gitbook, aici.
O parte din rezolvările mele la unele exerciții sînt aici.