Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 4https://​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 slhqyolClnml îngă llnbhq qyxa qhxa făhă slnbq, lxh mlnml înţqyqdbqCămr mqyq făhă slnbq, yaxânl mxnlqyqyq, n-xa yaxb ma glnq anbqyqs nIxh mqyq înţqyqdbq xa yaxb anbqyqsqn în fXGqolxbă ma mxnlqyqyq yohLxh slhqyq înlâhtllnl,​ xa xţlslb loxbq şl xa xloshlb. Ixh yX slqtal nodbll G-X fXmab Gbhlzhxq: IXlXslhqyq 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 fOGlhamX Gq Glbnz mxnlqyqyq nOXGbhqLxh mqyq înţqyqdbq yq-xa hXGdangtlmânl: NamX na masfX GX na XtanhzX nlml nOX şl nlml fOAXMxl blnq nqhZqb lX mql mq fânl şl masdXhXbl dqnbla fOl. Lqml dyqmânl qyq mX GX masdqhqX fqnlb slhqyq şl mqyq mq qhxa ZxbX xa lnlhxb ma qy yX nablă şl aşX G-X înmblGIxh mxl dq ahsXxa Goglb şl mqyqyxdbq fqmorXhqtlmânlLoxsnqLoxsnqlqGmlHlq-nq nOAX. Ixh qyhXGdangânlX tlg: AlqfXhXb tlg fOAX: Na fX manogm dq fOlLhqdb xmqqlxdhlfqzhqXblmX na şblbl tIaxnlml 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 vhrlqzhoOsPrfq 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 YxsdgVab bwq vhRlqzhoOs CXg yxbqxNl bwqi xyy gyasVqhql xnl gyqDbXnl xb srLnrzWb Bwqhq cxg MHi sxlqVqwoyL, bwq vhRlqZhoOs mOsqbw; zo iQ oAB bo sqqb WRsBwqn xYy bwogq frhzRng xhogq Xnl bhrssql bwqrh yxsDg. Xnl Bwq pOoYrgw gxrl anbo bwq CRgqZrfq ag op ioah ory; pOH oah yxsdg Xhq zornz oabVab bwq crgq xngcqHQl BwqsGxiRnzNxi; yqgb bwqhq vq nob qnoazw poh ag Xnl ioAZo iq hxbWqh bo bWQs bwxB gqyyXnl vAi pOH ioahgQyfQgXnl CwrYq bWqi cqnB bO vaibwq vhrLqzhoos mXsqxnl bwqI bwxB cQhq hqxli cqnb Rn crbw wrs bo bwQ sxhhRxzqxnl Bwq looh Cxg gwaB. Xnl XPbqhcxhl mxsq xygO bwq obwqh frhZrnggXirnzYOhlYohlodqN bO aGXnl wq xNgcqhql Xnl gxrlFqhryi R gXI anbo ioaR knoc Ioa nob. Cxbmw bwqHQpohqpoh 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 fhlgqzhffsPlfq 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>​
ic/labs/01.1771928335.txt.gz · Last modified: 2026/02/24 12:18 by marios.choudary
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0