Differences

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

Link to this comparison view

ic:labs:01 [2026/02/24 10:39]
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 criptatcodificat 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> 
 +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).+
  
 +<​note>​
 +Este posibil să nu meargă foarte bine din prima. Posibile lucruri de folos:
 +  - 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>​
  
-Îsdăhăţrx mqlahalyoh Gq fX xGqsănX ma tqmq fqmorXhqmxrq yaxânl ​mxnlqyqyq yoh, xa lqşlb ​în înlâsdlnxhqx slhqyolClnml îngă ​llnbhq qyxa qhxa făhă slnbqlxh mlnml înţqyqdbqCămr mqyq făhă slnbqyaxânl mxnlqyqyq, n-xa yaxb ma glnq anbqyqs nIxh mqyq înţqyqdbq xa yaxb anbqyqsqn ​în fXGq, olxbă ma mxnlqyqyq ​yoh. Lxh slhqyq înlâhtllnl, xa xţlslb loxbq şl xa xloshlbIxh yX slqtal nodbll G-X fXmab GbhlzhxqIXlXslhqyq fInqIqşlbh înlha înlâhtllnhqx yalAbanml 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: Na, mX na masfX GX na XtanhzX nlml nOX şl nlml fOAXMxl blnq nqhZqb lX mql mq fânl şl masdXhXbl dqnbla fOlLqml dyqmânl ​qyq mX GX masdqhq, X fqnlb slhqyq ​şl mqyq mq qhxa ZxbX xa lnlhxb ​ma qy yX nablă şX G-X înmblGIxh mxl dq ahsXxa Goglb şl mqyqyxdbq fqmorXhqtlmânl: Loxsnq, Loxsnq, ​lqGmlHlq-nq nOAXIxh qy, hXGdangânlX tlgAlqfXhXb tlg fOAX: Na fX manogm ​dq fOlLhqdb xmqqlxdhlfqzhqXblmX na şblbl tIaxnlml mQXGay mând fInq Play Oshayal+<file text ciphertext1.txt>​ 
 +ÎsDăhăţrX mQhaHryoh gq Fx xgqsăNX ma tqmq pqmroxhQmxHq Yaânl ​mxnlqyqyq yoh, xa rqŞrb ​în înbâsdrnxhqx srhqYARMrnmR îngă ​lRnbhq qYq qhxa păhă srnbqrxh MrNmr înŢqyQdBqMăMr mqyq păhă srnbqYaânl mXnlqyQyq, n-Xa yaxb mA grnq anBlqyqsnRxh mqyq îNţqyqdbq xa Yaxb anblqyqsn ​în fxGq, olxbĂ ma mxNlqyqyq ​yoh. Lxh srhqyQ înbÂhtrrnl, xa xţrdRb boxBQ Şr xa xlohsrbRXh yX srqtay NOdţrr g-X Pămab gbhRzxhqRxbăsrhQyq frnqRqşRţr înbha îNbâsdrnxhqx YarXbaNmr 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 fogbhamă gQ gbrnz mxnlqyQyq noxGbHqLxH mQyQ înţqyqdbQ Yq-xa hăgdanGtRmâ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 forLqmR dYqmânl ​qyq mX gă mAsdqhq, X fqnrb srHqyq ​şR mQYq mq Qhxa zxbx xa rnbhxb ​ma qy YX nanbă şx g-x înmwrgRXh sxr dQ ahsăxA GogrB şr mqyqyXybq pqmroXhqtrmânl: Loxsnq, Loxsnq, ​lqgmwrlq-nq noAăRxh qy, hĂgdaNtânlx trgXlqfăhxb trm foaă: Na fă Manogm ​dq forLhQdb xmqqxdHrfqzwqxţrmă na şbrţr traxnrMR mqxgaY mânl fRnq PrAy OsayAr. 
 +</​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 mlfqFfl bwq ffflliw bffk bwqkh lxmif xng bffk nf fli m b b bwqs. Cab bwq mlfq bffk fli ln fqffqif m b b bwqkh lxmifCab bwq fhlgqzhffs mxf ix bqxng bwqy xll fiyscqlqg xng flqdbXng xb slgnlzwb bwl lq mxf mly sx gqCqwl ig, bwq fhlgqzhffs ffsqbwg f yq fab b fqqb wl s. Bwqn xll bwf fq fkhglng xl fq xng b lssqg bwqkh lxmifXng bwq ffflliw fxlg fnb f bwq mlfqGl f q if f sfl b lfl l f l lxmif x lq g flng fabCab bwq mlfq xnfclq qg bwqsfxylngNx yiqfb bwl lq fq n b qn fzw fl l f xng y fG f yq lxbwl l b f bwq s b x b fqllxng cay f l y f l fqlf q fXng cwl iq bwqy m qnb b f cay, bwq fhlgqzhffs fxs qxng bwqy b x b m q lq lqxgy m qnb ln m b b wl s b bwq sx l l x g qxng bwq g f l mxf f wbXng xf b l cx lg fxs q x l f f bwq f bwl l fkhglngfxylngL flgL flgfdqn b f f fXng wq xnfclq qg xng fxlgF q l liy I f x y fnb f y fI kn fm y f n bWxb f b w l l q f l qf 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 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 crGqPoh 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 mOsqbwzo iQ oAB bo sqqb WRs. Bwqn xYy bwogq frhzRng xhogq Xnl bhrssql bwqrh yxsDgXnl Bwq pOoYrgw gxrl anbo bwq CRgqZrfq ag op ioah orypOH oah yxsdg Xhq zornz oabVab bwq crgq xngcqHQl BwqsGxiRnzNxiyqgb bwqhq vq nob qnoazw poh ag Xnl ioAZo iq hxbWqh bo bWQs bwxB gqyyXnl vAi pOH ioahgQyfQgXnl CwrYq bWqi cqnB bO vai, bwq vhrLqzhoos mXsqxnl bwqI bwxB cQhq hqxli cqnb Rn crbw wrs bo bwQ sxhhRxzqxnl Bwq looh Cxg gwaBXnl XPbqhcxhl mxsq xygO bwq obwqh frhZrnggXirnzYOhlYohlodqN bO aGXnl wq xNgcqhql Xnl gxrlFqhryi R gXI anbo ioaR knoc Ioa nobCxbmw bwqHQpohqpoh iq knoc nQRbwqh bwq lxI noh bwq Woah cwqhqrn bwq GoN op sxn Mosqbw. 
 +</​file>​
  
-Заогмэцъ ​Оъюъгпръ поыоюор ыъгямц ыъэят, фрмроыъ, эзяэ ​гэъмцгтсцфц гтрц, эыдгц рягмоъял пъосцам. Пямь ​из оих ​юыги ​съояялтоы, я пяфь ​— олыоы. Съояялтоы эзягц гтрц гтяъмцгтсцфц, ​ор ор эзягц г грюри тяггя. Мыыоыъ жъ эзягц ​тяггр э гргляях этогмъ гтр гтяъмцгтсцфятс гтрцтиЖеоиж рярыыяги эгъ пои заыоътмяли и гптялиИ э фргыржь оягыягпц фрим: юртжеоиж ​иыём; эыярыибъ рягмоъял ъосВргыя эгъ мъ ыъэы эгыяги и попоягиги гтяъмцгтсцфц гтрц. И съояялтоы пфячяги ныыоят: сяимъ оят тяггя эяджъпр, портил юрт гтяъмцгтсцфц оятци рягслиОр ныыоыъ рмэъжяги ит: оъм, юырюы ор юыгр орцргыягряор си оят, си эятИлжцъ яиимъ ф поряяищит и флпимъ гъюъ. И фргыя ​пои подиг ​флплэямь, поимёг жеоижи мъ, фмр югу жрмрэ, ​эрдги г оит оя юояжсиа ​пиои ыэъоь зямтркоигягьИ помыот ​поимги и ыолицъ ыъэы, ряррояЖрппрыиЖрппрыи, рмфомъ оят! И Ос, рмэъжяяпфячягипмиоор рярроя эят: ​Я ор зояи эяг. Юрыопмэрбмъ жъ, июр ор зояъмъ си ыот, си жяпя, фргыя поимёг Гио ​Жъгрэъжъгфии+<file text ciphertext3.txt>​ 
 +Зяонмэцъ ​СъюъНсръ прЫрюср ыънгмЦ Ыъэят, фрмробъ, эчгэ нэъмцуасцФц нэрц, эбдуц сЯэНмОЪжл шъсцил. ПГМа цч сци юбуц ​съоячлтсб, я пгма ​— тлыоБ. Съоячлтсбъ ​эчгуц нэъМцуасцфЦ нэРц, Ср съ эчгуц н нрЮрх тянуя. Тлыобъ шъ эчГуЦ ​тянур э нрнЛыяи этънмъ нр нэЪмцУасцфятц нЭрцТЦШъсци рпРчыяуЦ энъ рсц чяыоътЯуц Ц лНслуЦЦ э пРусРжа оячЫяунг фоцФ: эРм, шЪсЦи цыщм; эбирыцмъ сяэнмоъжЛ Ътл! Мрьыя энъ мЪ ыъэб ЭнМЯуц Ц прпояЭцуц нэъмцуАсцфЦ нэрц. Ц съоячлтсБъ нфячяуц тлыОбт: ыяхМъ сят тянуя эядъьР, прМртл ​жмр нэъмцуасЦфц сядц ьяНслмСр тлыобъ рмэъжяуц цт: съм, жМРюб съ юбур СъырнмямРжСр сц Сят, сц ЭЯТУлждъ цыцмъ ф порыяДгцТ Ц флпцмъ НъЮъ. Ц фрьЫЯ рсц Прдуц ​прфЛпяма, поцДщу шъСци, ц мъ, фмР юбу ьрмрэ, ​ЭрдуЦ н сцт сЯ ЮояжСбх ​пцОц Ыэъоа чЯмэроцуЯнаЦ ПрмрТ поцдуЦ ц ыольцъ ыъэБьрэрогЬрнпрыцЬрнПрыц, рмфорх сят! Ц Рс, рмэъжягНфячяуцнмцсср ЬрэроД эят: ​Г съ чСяд эян. ЮрыонмэЛХмъ Шъ, Цюр съ чсяъмъ ​Сц ысг, сц жяня, фрьыя Поцыщм Нбс ​ЖъУРэъжънфцх 
 +</​file>​
  
 <​hidden>​ <​hidden>​
Line 403: 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 572: Line 585:
 </​code>​ </​code>​
  
-=== Exercițiul #5 - Shift Ciphers (2p) ===+=== Exercițiul #5 - Shift Ciphers (1p) ===
  
 Folosind valori implicite, extindeți funcția `caesar_dec_string` pentru a decripta mesaje criptate cu shift cipher, astfel încât să suporte chei arbitrare. Folosind valori implicite, extindeți funcția `caesar_dec_string` pentru a decripta mesaje criptate cu shift cipher, astfel încât să suporte chei arbitrare.
Line 607: 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.1771922375.txt.gz · Last modified: 2026/02/24 10:39 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