This shows you the differences between two versions of the page.
|
ic:labs:01 [2026/02/24 10:28] 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 === | + | 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> |
| + | 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 === | + | 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ă | + | |
| - | - rusă | + | |
| - | Apoi decriptați următoarele string-uri care au fost criptate cu shift cipher și determinați limba lor | + | Precum am arătat la curs, faceți tabelul de frecvențe pentru următoarele limbi: engleză, română și rusă. |
| + | Pentru asta folosiți orice text (suficient de lung) doriți de pe internet (Wikipedia, Enciclopedii, Pagini, Cărți, etc.). | ||
| - | Î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 | + | 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). |
| - | 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 | + | <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> | ||
| - | Заогмэцъ Оъюъгпръ поыоюор ыъгямц ыъэят, фрмроыъ, эзяэ гэъмцгтсцфц гтрц, эыдгц рягмоъял пъосцам. Пямь из оих юыги съояялтоы, я пяфь — олыоы. Съояялтоы эзягц гтрц гтяъмцгтсцфц, ор ор эзягц г грюри тяггя. Мыыоыъ жъ эзягц тяггр э гргляях этогмъ гтр гтяъмцгтсцфятс гтрцти. Жеоиж рярыыяг, и эгъ пои заыоътмяли и гптяли. И э фргыржь оягыягпц фрим: юрт, жеоиж иыём; эыярыибъ рягмоъял ъос! Вргыя эгъ мъ ыъэы эгыяги и попоягиги гтяъмцгтсцфц гтрц. И съояялтоы пфячяги ныыоят: сяимъ оят тяггя эяджъпр, портил юрт гтяъмцгтсцфц оятци рягсли. Ор ныыоыъ рмэъжяги ит: оъм, юырюы ор юыгр орцргыягряор си оят, си эят. Илжцъ яиимъ ф поряяищит и флпимъ гъюъ. И фргыя пои подиг флплэямь, поимёг жеоиж, и мъ, фмр югу жрмрэ, эрдги г оит оя юояжсиа пио; и ыэъоь зямтркоигягь. И помыот поимги и ыолицъ ыъэы, рярроя: Жрппрыи, Жрппрыи, рмфомъ оят! И Ос, рмэъжяя, пфячяг: ипмиоор рярроя эят: Я ор зояи эяг. Юрыопмэрбмъ жъ, июр ор зояъмъ си ыот, си жяпя, фргыя поимёг Гио Жъгрэъжъгфии | + | <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> | ||
| + | |||
| + | <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> | ||
| + | |||
| + | <file text ciphertext3.txt> | ||
| + | Зяонмэцъ СъюъНсръ прЫрюср ыънгмЦ Ыъэят, фрмробъ, эчгэ нэъмцуасцФц нэрц, эбдуц сЯэНмОЪжл шъсцил. ПГМа цч сци юбуц съоячлтсб, я пгма — тлыоБ. Съоячлтсбъ эчгуц нэъМцуасцфЦ нэРц, Ср съ эчгуц н нрЮрх тянуя. Тлыобъ шъ эчГуЦ тянур э нрнЛыяи этънмъ нр нэЪмцУасцфятц нЭрцТЦ. Шъсци рпРчыяу, Ц энъ рсц чяыоътЯуц Ц лНслуЦ. Ц э пРусРжа оячЫяунг фоцФ: эРм, шЪсЦи цыщм; эбирыцмъ сяэнмоъжЛ Ътл! Мрьыя энъ мЪ ыъэб ЭнМЯуц Ц прпояЭцуц нэъмцуАсцфЦ нэрц. Ц съоячлтсБъ нфячяуц тлыОбт: ыяхМъ сят тянуя эядъьР, прМртл жмр нэъмцуасЦфц сядц ьяНслм. Ср тлыобъ рмэъжяуц цт: съм, жМРюб съ юбур СъырнмямРжСр сц Сят, сц ЭЯТ. Улждъ цыцмъ ф порыяДгцТ Ц флпцмъ НъЮъ. Ц фрьЫЯ рсц Прдуц прфЛпяма, поцДщу шъСци, ц мъ, фмР юбу ьрмрэ, ЭрдуЦ н сцт сЯ ЮояжСбх пцО; ц Ыэъоа чЯмэроцуЯна. Ц ПрмрТ поцдуЦ ц ыольцъ ыъэБ, ьрэрог: Ьрнпрыц, ЬрнПрыц, рмфорх сят! Ц Рс, рмэъжяг, Нфячяу: цнмцсср ЬрэроД эят: Г съ чСяд эян. ЮрыонмэЛХмъ Шъ, Цюр съ чсяъмъ Сц ысг, сц жяня, фрьыя Поцыщм Нбс ЖъУРэъжънфцх | ||
| + | </file> | ||
| + | |||
| + | <hidden> | ||
| + | Latin Alphabet (Used for Romanian & English) | ||
| + | | Original | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | | ||
| + | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | ||
| + | | Cipher | X | V | M | L | Q | P | Z | W | R | U | K | Y | S | N | O | D | J | H | G | B | A | F | C | E | I | T | | ||
| + | |||
| + | Cyrillic Alphabet (Used for Russian) | ||
| + | | Оригинал | А | Б | В | Г | Д | Е | Ё | Ж | З | И | Й | К | Л | М | Н | О | П | Р | С | Т | У | Ф | Х | Ц | Ч | Ш | Щ | Ъ | Ы | Ь | Э | Ю | Я | | ||
| + | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | ||
| + | | Шифр | Я | Ю | Э | Ь | Ы | Ъ | Щ | Ш | Ч | Ц | Х | Ф | У | Т | С | Р | П | О | Н | М | Л | К | И | З | Ж | Д | Г | В | Б | А | Е | Д | Г | | ||
| + | |||
| + | Text 1: | ||
| + | |||
| + | "Împărăţia cerurilor se va asemăna cu zece fecioare, care luând candelele lor, au ieşit în întâmpinarea mirelui. Cinci însă dintre ele erau fără minte, iar cinci înţelepte. Căci cele fără minte, luând candelele, n-au luat cu sine untdelemn. Iar cele înţelepte au luat untdelemn în vase, odată cu candelele lor. Dar mirele întârziind, au aţipit toate şi au adormit. Iar la miezul nopţii s-a făcut strigare: Iată, mirele vine! Ieşiţi întru întâmpinarea lui! Atunci s-au deşteptat toate acele fecioare şi au împodobit candelele lor. Şi cele fără minte au zis către cele înţelepte: Daţi-ne din untdelemnul vostru, că se sting candelele noastre. Dar cele înţelepte le-au răspuns, zicând: Nu, ca nu cumva să nu ne ajungă nici nouă şi nici vouă. Mai bine mergeţi la cei ce vând şi cumpăraţi pentru voi. Deci plecând ele ca să cumpere, a venit mirele şi cele ce erau gata au intrat cu el la nuntă şi uşa s-a închis. Iar mai pe urmă, au sosit şi celelalte fecioare, zicând: Doamne, Doamne, deschide-ne nouă. Iar el, răspunzând, a zis: Adevărat zic vouă: Nu vă cunosc pe voi. Drept aceea, privegheaţi, că nu ştiţi ziua, nici ceasul când vine Fiul Omului." | ||
| + | |||
| + | |||
| + | |||
| + | Text 2: | ||
| + | |||
| + | "The kingdom of heaven will be like ten virgins who took their lamps and went out to meet the bridegroom. Five of them were foolish and five were wise. For the foolish took their lamps and took no oil with them. But the wise took oil in vessels with their lamps. But the bridegroom was late, and they all slumbered and slept. And at midnight there was a cry made, Behold, the bridegroom cometh; go ye out to meet him. Then all those virgins arose and trimmed their lamps. And the foolish said unto the wise, Give us of your oil; for our lamps are going out. But the wise answered them, saying, Nay; lest there be not enough for us and you. Go ye rather to them that sell, and buy for yourselves. And while they went to buy, the bridegroom came, and they that were ready went in with him to the marriage: and the door was shut. And afterward came also the other virgins, saying, Lord, Lord, open to us. And he answered and said, Verily I say unto you, I know you not. Watch therefore, for ye know neither the day nor the hour wherein the Son of man cometh." | ||
| + | |||
| + | |||
| + | |||
| + | Text 3: | ||
| + | |||
| + | "Царствие Небесное подобно десяти девам, которые, взяв светильники свои, вышли навстречу жениху. Пять из них были неразумны, а пять — мудры. Неразумные взяли светильники свои, но не взяли с собой масла. Мудрые же взяли масло в сосудах вместе со светильниками своими. Жених опоздал, и все они задремали и уснули. И в полночь раздался крик: вот, жених идёт; выходите навстречу ему! Тогда все те девы встали и поправили светильники свои. И неразумные сказали мудрым: дайте нам масла вашего, потому что светильники наши гаснут. Но мудрые отвечали им: нет, чтобы не было недостаточно ни нам, ни вам. Лучше идите к продающим и купите себе. И когда они пошли покупать, пришёл жених, и те, кто был готов, вошли с ним на брачный пир; и дверь затворилась. И потом пришли и другие девы, говоря: Господи, Господи, открой нам! И Он, отвечая, сказал: истинно говорю вам: Я не знаю вас. Бодрствуйте же, ибо не знаете ни дня, ни часа, когда придёт Сын Человеческий" | ||
| + | |||
| + | </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. | ||
| - | === Exercițiul #1 - Encoding is nice (2p) === | + | === Exercițiul #1 - Encoding is nice (1p) === |
| Decodificați următoarele stringuri: | Decodificați următoarele stringuri: | ||
| Line 381: | Line 427: | ||
| </code> | </code> | ||
| - | === Exercițiul #2 - But XOR-ing is cool (2p) === | + | === Exercițiul #2 - But XOR-ing is cool (1p) === |
| Găsiți mesajele în clar pentru următoarele ciphertexturi, știind că cifrul este operația XOR (ciphertext = plaintext XOR key), iar cheia este "abcdefghijkl". | Găsiți mesajele în clar pentru următoarele ciphertexturi, știind că cifrul este operația XOR (ciphertext = plaintext XOR key), iar cheia este "abcdefghijkl". | ||
| Line 441: | Line 487: | ||
| </code> | </code> | ||
| - | === Exercițiul #3 - Decriptarea unei litere (2p) === | + | === Exercițiul #3 - Decriptarea unei litere (1p) === |
| Adăugați o funcție 'caesar_dec' în fișierul 'caesar.py' care decriptează o singură literă criptată folosind cifrul lui Cezar. | Adăugați o funcție 'caesar_dec' în fișierul 'caesar.py' care decriptează o singură literă criptată folosind cifrul lui Cezar. | ||
| Line 505: | Line 551: | ||
| </note> | </note> | ||
| - | === Exercițiul #4 - Decriptarea unui string (2p) === | + | === Exercițiul #4 - Decriptarea unui string (1p) === |
| Scrieți funcția de decriptare numită 'caesar_dec_string'. | Scrieți funcția de decriptare numită 'caesar_dec_string'. | ||
| Line 539: | 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 574: | 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> | ||