This shows you the differences between two versions of the page.
|
ic:labs:01 [2026/02/24 12:18] marios.choudary |
ic:labs:01 [2026/02/27 08:07] (current) razvan.smadu [Laboratorul 01 - Introducere] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ===== Laboratorul 01 - Introducere ===== | ===== Laboratorul 01 - Introducere ===== | ||
| - | În afară de exercițiile 0/0b, puteți lucra acest laborator folosind și platforma Google Colab, accesând [[https://colab.research.google.com/github/ACS-IC-labs/IC-labs/blob/main/labs/lab01/lab1.ipynb|acest]] link, cu excepția exercițiului bonus. Un scurt tutorial pentru utilizarea platformei poate fi găsit [[https://docs.google.com/document/d/1Dcnyv9wTfWJx8CEgnR6OgLbHAO7XD1BXGjwOAMAEmlc/edit|aici]]. | + | Puteți lucra acest laborator folosind și platforma Google Colab, accesând [[https://colab.research.google.com/github/ACS-IC-labs/IC-labs/blob/main/labs/lab01/lab1.ipynb|acest]] link, cu excepția exercițiului bonus și eventual 0/0b. Un scurt tutorial pentru utilizarea platformei poate fi găsit [[https://docs.google.com/document/d/1Dcnyv9wTfWJx8CEgnR6OgLbHAO7XD1BXGjwOAMAEmlc/edit|aici]]. |
| ==== Python3 Crash Course ==== | ==== Python3 Crash Course ==== | ||
| Line 337: | Line 337: | ||
| </spoiler> | </spoiler> | ||
| - | == Bytes în Python == | ||
| - | Să considerăm exemplele de mai jos: | ||
| - | <code python> | ||
| - | text1 = "Ana are mere" | ||
| - | text2 = b"Ana are mere" | ||
| - | print(type(text1)) # <class 'str'> | ||
| - | print(type(text2)) # <class 'bytes'> | ||
| - | </code> | ||
| - | Ambele variabile stochează aceeași informație. Diferența constă în modul cum sunt păstrate datele intern, cele două texte fiind codificate în 2 obiecte de tipuri diferite (string și bytes). În timpul laboratoarelor vom lucra de foarte multe ori cu tipul string, dar unele biblioteci externe pot necesita transformarea datelor din formatul string în formatul bytes. | + | === Exercițiul #0 - O criptare (2p) === |
| - | === Exercițiul #0 - o criptare (2p) === | + | Folosiți orice cod vreți, generat cum vreți voi (GenAI, etc.), pentru a cripta slide-ul de titlu din curs (slide 4) https://curs.upb.ro/2025/mod/resource/view.php?id=120046 astfel încât să obțineți două variante diferite: |
| - | Folosiți orice cod vreți, generat cum vreți voi (GenAI, etc.), pentru a cripta slide-ul de titlu din curs (slide 4): | + | a) Slide-ul criptat ca în slide-ul 2 (se vede ceva dar nu se înțelege). Salvați slide-ul ca o imagine (e.g., screenshot) și apoi faceți criptarea. |
| - | https://curs.upb.ro/2025/mod/resource/view.php?id=120046 | + | |
| - | astfel încât să obțineți 2 variante diferite: a) slide-ul criptat ca în slide-ul 2 (se vede ceva dar nu se înțelege); doar textul criptat, codificat Base64 (ca în slide-ul 3). Salvați slide-ul ca o imagine (e.g. screenshot) și apoi faceți criptarea pentru primul pas. | + | <note tip> |
| - | Hint: pentru primul pas, ca să obțineți ceva asemănător cu slide-ul 2, folosiți un block cipher dar fără random IV (e.g. mod ECB). | + | Ca să obțineți ceva asemănător cu slide-ul 2, folosiți un block cipher dar fără random IV (e.g. mod ECB). |
| + | </note> | ||
| - | === Exercițiul #0b - statistici în alte limbi (3p) === | + | b) Doar textul de pe slide criptat, codificat Base64 (ca în slide-ul 3). |
| - | Precum am arătat la curs, faceți tabelul de frecvențe pentru următoarele limbi: | + | === Exercițiul #0b - Statistici în alte limbi (3p) === |
| - | - engleză | + | |
| - | - română | + | Precum am arătat la curs, faceți tabelul de frecvențe pentru următoarele limbi: engleză, română și rusă. |
| - | - rusă | + | |
| Pentru asta folosiți orice text (suficient de lung) doriți de pe internet (Wikipedia, Enciclopedii, Pagini, Cărți, etc.). | Pentru asta folosiți orice text (suficient de lung) doriți de pe internet (Wikipedia, Enciclopedii, Pagini, Cărți, etc.). | ||
| - | Apoi decriptați următoarele string-uri care au fost criptate cu substitution cipher fiecare în limba lor. | + | Apoi decriptați următoarele string-uri care au fost criptate cu substitution cipher fiecare în limba lor. O metodă simplă este să mapați frecvențele: litera cu frecvența cea mai mare în textul criptat (ciphertext) corespunde cu litera cea mai frecventă în text-ul necriptat (tabel făcut de voi). |
| - | O metodă simplă este să mapați frecvențele: litera cu frecvența cea mai mare în textul criptat (ciphertext) | + | |
| - | corespunde cu litera cea mai frecventă în text-ul necriptat (tabel făcut de voi). | + | |
| - | Notă: e posibil să nu meargă foarte bine din prima. Posibile lucruri de folos: | + | <note> |
| - | * să vă asigurați că ați generat tabelul de frecvențe cu un text suficient de lung în limba respectivă (eventual comparați și cu ce mai găsiți gata făcut pe internet); | + | Este posibil să nu meargă foarte bine din prima. Posibile lucruri de folos: |
| - | * să folosiți și un tabel de frecvență cu câte 2 (eventual și 3) litere și astfel să corectați maparea inițială. | + | - să vă asigurați că ați generat tabelul de frecvențe cu un text suficient de lung în limba respectivă (eventual comparați și cu ce mai găsiți gata făcut pe internet); |
| + | - să folosiți și un tabel de frecvență cu câte 2 (eventual și 3) litere și astfel să corectați maparea inițială. | ||
| + | </note> | ||
| + | <file text ciphertext1.txt> | ||
| + | ÎsDăhăţrX mQhaHryoh gq Fx xgqsăNX ma tqmq pqmroxhQ, mxHq Yaânl mxnlqyqyq yoh, xa rqŞrb în înbâsdrnxhqx srhqYAR. MrnmR îngă lRnbhq qYq qhxa păhă srnbq, rxh MrNmr înŢqyQdBq. MăMr mqyq păhă srnbq, Yaânl mXnlqyQyq, n-Xa yaxb mA grnq anBlqyqsn. Rxh mqyq îNţqyqdbq xa Yaxb anblqyqsn în fxGq, olxbĂ ma mxNlqyqyq yoh. Lxh srhqyQ înbÂhtrrnl, xa xţrdRb boxBQ Şr xa xlohsrb. RXh yX srqtay NOdţrr g-X Pămab gbhRzxhq: Rxbă, srhQyq frnq! RqşRţr înbha îNbâsdrnxhqx Yar! XbaNmr g-xa lqşbQdbxb boXbq xmqyq pqmRoxhq şr xA îsdolovrb mxNlqyqyq yoH. Şr mqYq păhă srNbq Xa trg Măbhq mqyq înţqyqdbq: Lxţr-nq lrN anblQyqsNay fogbha, mă gQ gbrnz mxnlqyQyq noxGbHq. LxH mQyQ înţqyqdbQ Yq-xa hăgdanG, tRmânl: Na, mx nA maSFx gă na Nq xUanzĂ nrmr noaă şR nrmr foaă. Sxr vrnq sqHzqţr yX mqr mq fânL şR masdăhxŢr dqnbha for. LqmR dYqmânl qyq mX gă mAsdqhq, X fqnrb srHqyq şR mQYq mq Qhxa zxbx xa rnbhxb ma qy YX nanbă şr aşx g-x înmwrg. RXh sxr dQ ahsă, xA GogrB şr mqyqyXybq pqmroXhq, trmânl: Loxsnq, Loxsnq, lqgmwrlq-nq noAă. Rxh qy, hĂgdaNtânl, x trg: Xlqfăhxb trm foaă: Na fă Manogm dq for. LhQdb xmqqx, dHrfqzwqxţr, mă na şbrţr trax, nrMR mqxgaY mânl fRnq PrAy OsayAr. | ||
| + | </file> | ||
| - | Îsdăhăţrx mqlahalyoh Gq fX xGqsănX ma tqmq fqmorXhq, mxrq yaxânl mxnlqyqyq yoh, xa lqşlb în înlâsdlnxhqx slhqyol. Clnml îngă llnbhq qyxa qhxa făhă slnbq, lxh mlnml înţqyqdbq. Cămr mqyq făhă slnbq, yaxânl mxnlqyqyq, n-xa yaxb ma glnq anbqyqs n. Ixh mqyq înţqyqdbq xa yaxb anbqyqsqn în fXGq, olxbă ma mxnlqyqyq yoh. Lxh slhqyq înlâhtllnl, xa xţlslb loxbq şl xa xloshlb. Ixh yX slqtal nodbll G-X fXmab Gbhlzhxq: IXlX, slhqyq fInq! Iqşlbh înlha înlâhtllnhqx yal! Abanml G-Xa lqşlqdbxb loxbq xmqyq fqmorXhq şl xa îndolobl mxnlqyqyq yoh. Şl mqyq făhă slnbq xa tlg mXbhq mqyq înţqyqdbq: Lxb l-nq lln anbqyqsqnay fOGlha, mX Gq Glbnz mxnlqyqyq nOXGbhq. Lxh mqyq înţqyqdbq yq-xa hXGdang, tlmânl: Na, mX na masfX GX na XtanhzX nlml nOX şl nlml fOAX. Mxl blnq nqhZqb lX mql mq fânl şl masdXhXbl dqnbla fOl. Lqml dyqmânl qyq mX GX masdqhq, X fqnlb slhqyq şl mqyq mq qhxa ZxbX xa lnlhxb ma qy yX nablă şl aşX G-X înmblG. Ixh mxl dq ahsX, xa Goglb şl mqyqyxdbq fqmorXhq, tlmânl: Loxsnq, Loxsnq, lqGmlHlq-nq nOAX. Ixh qy, hXGdangânl, X tlg: AlqfXhXb tlg fOAX: Na fX manogm dq fOl. Lhqdb xmqqlx, dhlfqzhqXbl, mX na şblbl tIax, nlml mQXGay mând fInq Play Oshayal | + | <file text ciphertext2.txt> |
| + | Bwq kRnzlOs op wqxfqn cryy vq yrkq bqn frhZrng cwo book bwqrh yxsdg Xnl cQnb oab bo sqqb BwQ vhrlqzhoOs. Prfq op bWqS cqhq PooyrGw xnL pRfq cqhq crGq. Poh Bwq poOyrgw boOk bwqrH yxSdG xnl boOk No ORy crBW bwqs. VAb bwq crGq bOok ory Rn fqggQYg Crbw bwqrh Yxsdg. Vab bwq vhRlqzhoOs CXg yxbq, xNl bwqi xyy gyasVqhql xnl gyqDb. Xnl xb srLnrzWb Bwqhq cxg x MHi sxlq, VqwoyL, bwq vhRlqZhoOs mOsqbw; zo iQ oAB bo sqqb WRs. Bwqn xYy bwogq frhzRng xhogq Xnl bhrssql bwqrh yxsDg. Xnl Bwq pOoYrgw gxrl anbo bwq CRgq, Zrfq ag op ioah ory; pOH oah yxsdg Xhq zornz oab. Vab bwq crgq xngcqHQl Bwqs, GxiRnz, Nxi; yqgb bwqhq vq nob qnoazw poh ag Xnl ioA. Zo iq hxbWqh bo bWQs bwxB gqyy, Xnl vAi pOH ioahgQyfQg. Xnl CwrYq bWqi cqnB bO vai, bwq vhrLqzhoos mXsq, xnl bwqI bwxB cQhq hqxli cqnb Rn crbw wrs bo bwQ sxhhRxzq: xnl Bwq looh Cxg gwaB. Xnl XPbqhcxhl mxsq xygO bwq obwqh frhZrng, gXirnz, YOhl, Yohl, odqN bO aG. Xnl wq xNgcqhql Xnl gxrl, Fqhryi R gXI anbo ioa, R knoc Ioa nob. Cxbmw bwqHQpohq, poh iq knoc nQRbwqh bwq lxI noh bwq Woah cwqhqrn bwq GoN op sxn Mosqbw. | ||
| + | </file> | ||
| - | Bwq klngdos op wqxfqn clll fq lkkw bqn fkhglng mwo bffk bwqkh lxmif xng mwnb fab b fqqb bwq fhlgqzhffs. Plfq fp bwqs mqlq ffflliw xng flfq mqlq mlfq. Ffl bwq ffflliw bffk bwqkh lxmif xng bffk nf fli m b b bwqs. Cab bwq mlfq bffk fli ln fqffqif m b b bwqkh lxmif. Cab bwq fhlgqzhffs mxf ix bq, xng bwqy xll fiyscqlqg xng flqdb. Xng xb slgnlzwb bwl lq mxf x mly sx gq, Cqwl ig, bwq fhlgqzhffs ffsqbw; g f yq fab b fqqb wl s. Bwqn xll bwf fq fkhglng xl fq xng b lssqg bwqkh lxmif. Xng bwq ffflliw fxlg fnb f bwq mlfq, Gl f q if f sfl b l; fl l f l lxmif x lq g flng fab. Cab bwq mlfq xnfclq qg bwqs, fxylng, Nx y; iqfb bwl lq fq n b qn fzw fl l f xng y f. G f yq lxbwl l b f bwq s b x b fqll, xng cay f l y f l fqlf q f. Xng cwl iq bwqy m qnb b f cay, bwq fhlgqzhffs fxs q, xng bwqy b x b m q lq lqxgy m qnb ln m b b wl s b bwq sx l l x g q: xng bwq g f l mxf f wb. Xng xf b l cx lg fxs q x l f f bwq f bwl l fkhglng, fxylng, L flg, L flg, fdqn b f f f. Xng wq xnfclq qg xng fxlg, F q l liy I f x y fnb f y f, I kn fm y f n b. Wxb f b w l l q f l q, f l y q kn fm n q b b w l b b w q g x y n l b w q w f l m l b q l n b w q S f n f f s x n f f f q b w | + | <file text ciphertext3.txt> |
| - | + | Зяонмэцъ СъюъНсръ прЫрюср ыънгмЦ Ыъэят, фрмробъ, эчгэ нэъмцуасцФц нэрц, эбдуц сЯэНмОЪжл шъсцил. ПГМа цч сци юбуц съоячлтсб, я пгма — тлыоБ. Съоячлтсбъ эчгуц нэъМцуасцфЦ нэРц, Ср съ эчгуц н нрЮрх тянуя. Тлыобъ шъ эчГуЦ тянур э нрнЛыяи этънмъ нр нэЪмцУасцфятц нЭрцТЦ. Шъсци рпРчыяу, Ц энъ рсц чяыоътЯуц Ц лНслуЦ. Ц э пРусРжа оячЫяунг фоцФ: эРм, шЪсЦи цыщм; эбирыцмъ сяэнмоъжЛ Ътл! Мрьыя энъ мЪ ыъэб ЭнМЯуц Ц прпояЭцуц нэъмцуАсцфЦ нэрц. Ц съоячлтсБъ нфячяуц тлыОбт: ыяхМъ сят тянуя эядъьР, прМртл жмр нэъмцуасЦфц сядц ьяНслм. Ср тлыобъ рмэъжяуц цт: съм, жМРюб съ юбур СъырнмямРжСр сц Сят, сц ЭЯТ. Улждъ цыцмъ ф порыяДгцТ Ц флпцмъ НъЮъ. Ц фрьЫЯ рсц Прдуц прфЛпяма, поцДщу шъСци, ц мъ, фмР юбу ьрмрэ, ЭрдуЦ н сцт сЯ ЮояжСбх пцО; ц Ыэъоа чЯмэроцуЯна. Ц ПрмрТ поцдуЦ ц ыольцъ ыъэБ, ьрэрог: Ьрнпрыц, ЬрнПрыц, рмфорх сят! Ц Рс, рмэъжяг, Нфячяу: цнмцсср ЬрэроД эят: Г съ чСяд эян. ЮрыонмэЛХмъ Шъ, Цюр съ чсяъмъ Сц ысг, сц жяня, фрьыя Поцыщм Нбс ЖъУРэъжънфцх | |
| - | Заогмэцъ Оъюъгпръ поыоюор ыъгямц ыъэят, фрмроыъ, эзяэ гэъмцгтсцфц гтрц, эыдгц рягмоъял пъосцам. Пямь из оих юыги съояялтоы, я пяфь — олыоы. Съояялтоы эзягц гтрц гтяъмцгтсцфц, ор ор эзягц г грюри тяггя. Мыыоыъ жъ эзягц тяггр э гргляях этогмъ гтр гтяъмцгтсцфятс гтрцти. Жеоиж рярыыяг, и эгъ пои заыоътмяли и гптяли. И э фргыржь оягыягпц фрим: юрт, жеоиж иыём; эыярыибъ рягмоъял ъос! Вргыя эгъ мъ ыъэы эгыяги и попоягиги гтяъмцгтсцфц гтрц. И съояялтоы пфячяги ныыоят: сяимъ оят тяггя эяджъпр, портил юрт гтяъмцгтсцфц оятци рягсли. Ор ныыоыъ рмэъжяги ит: оъм, юырюы ор юыгр орцргыягряор си оят, си эят. Илжцъ яиимъ ф поряяищит и флпимъ гъюъ. И фргыя пои подиг флплэямь, поимёг жеоиж, и мъ, фмр югу жрмрэ, эрдги г оит оя юояжсиа пио; и ыэъоь зямтркоигягь. И помыот поимги и ыолицъ ыъэы, рярроя: Жрппрыи, Жрппрыи, рмфомъ оят! И Ос, рмэъжяя, пфячяг: ипмиоор рярроя эят: Я ор зояи эяг. Юрыопмэрбмъ жъ, июр ор зояъмъ си ыот, си жяпя, фргыя поимёг Гио Жъгрэъжъгфии | + | </file> |
| <hidden> | <hidden> | ||
| Line 408: | Line 404: | ||
| </hidden> | </hidden> | ||
| + | |||
| + | |||
| + | === Bytes în Python === | ||
| + | Să considerăm exemplele de mai jos: | ||
| + | <code python> | ||
| + | text1 = "Ana are mere" | ||
| + | text2 = b"Ana are mere" | ||
| + | print(type(text1)) # <class 'str'> | ||
| + | print(type(text2)) # <class 'bytes'> | ||
| + | </code> | ||
| + | |||
| + | Ambele variabile stochează aceeași informație. Diferența constă în modul cum sunt păstrate datele intern, cele două texte fiind codificate în 2 obiecte de tipuri diferite (string și bytes). În timpul laboratoarelor vom lucra de foarte multe ori cu tipul string, dar unele biblioteci externe pot necesita transformarea datelor din formatul string în formatul bytes. | ||
| Line 612: | Line 620: | ||
| * Ce se întâmplă dacă faceți XOR între un caracter [a-z] cu caracterul ' ' (spațiu)? Verificați de asemenea pentru [A-Z]. | * Ce se întâmplă dacă faceți XOR între un caracter [a-z] cu caracterul ' ' (spațiu)? Verificați de asemenea pentru [A-Z]. | ||
| * Nu puteți scrie un algoritm perfect care să rezolve problema din prima încercare, cel mai probabil va trebui să ghiciți. De ce? | * Nu puteți scrie un algoritm perfect care să rezolve problema din prima încercare, cel mai probabil va trebui să ghiciți. De ce? | ||
| - | * Provocarea este interesantă, dar poate deveni muncitorească. Din fericire pentru noi, există o implementare open source care poate fi găsită [[https://github.com/cosminacho/MTP|aici]]. Vedeți mai jos cum poate fi rulat. Acest tool se folosește de observațiile de mai sus pentru a [[https://github.com/cosminacho/MTP/blob/master/manytime/analysis.py#L34-L55|recupera câteva litere]] din cheie. Posibil ca nu toate literele deja existente să fie puse corect. | + | * Provocarea este interesantă, dar poate deveni muncitorească. Din fericire pentru noi, există o implementare open source care poate fi găsită [[https://github.com/ACS-IC-labs/MTP|aici]]. Vedeți mai jos cum poate fi rulat. Acest tool se folosește de observațiile de mai sus pentru a [[https://github.com/ACS-IC-labs/MTP/blob/master/manytime/analysis.py#L34-L55|recupera câteva litere]] din cheie. Posibil ca nu toate literele deja existente să fie puse corect. |
| </note> | </note> | ||