Palaksanaan Substitusi Cipher jeung sababaraha analisis statistik
Motivasi
Naha anjeun ka dieu kusabab hariwang yén sadaya lalu lintas anjeun di-sniff sareng dianalisis ku pamaréntah? Anjeun aya di tempat anu leres! Di dieu anjeun bakal diajar énkripsi téks anjeun sareng maca obrolan rahasia batur anu énkripsi nganggo cipher substitusi. Anu goréng nyaéta dina tungtungna, anjeun bakal yakin yén sadaya obrolan anjeun dina WhatsApp tiasa gampang dikodekeun (pasti ieu henteu leres, Facebook mutuskeun pikeun henteu nganggo cipher substitusi pikeun WhatsApp sakitar 40 taun ka pengker). Urang bakal nerapkeun cipher substitusi di Python, lajeng urang bakal nyoba megatkeun kode ngagunakeun statistik. Pikiran Geulis
Substitusi Cipher
Wikipedia nyebutkeun:
Dina kriptografi, cipher substitusi nyaéta métode énkripsi ku mana unit plaintext diganti ku ciphertext, nurutkeun sistem tetep; “Satuan” bisa mangrupa hurup tunggal (paling umum), pasangan hurup, triplets hurup, campuran di luhur, jeung saterusna. Panarima deciphers téks ku ngajalankeun substitusi tibalik.
Dina basa sejen, sakabeh hurup “A” diganti ku “B”, sarta sakabeh “B” diganti ku hal sejenna. Urang ngan campur kabéh hurup. Sareng jalma anu nampi téks énkripsi terang dimana hurup dicampur. Hayu urang tingali conto. Anjeun gaduh téks ieu:
Dina jalan raya gurun poék Angin tiis dina buuk kuring Bau haneut tina colitas Rising nepi ngaliwatan hawa Ka hareup di kajauhan Kuring nempo lampu shimmering Sirah kuring beuki beurat jeung panon kuring beuki taram Kuring kungsi eureun pikeun peuting. Aya manéhna nangtung di doorway Kuring ngadéngé bel misi Sareng kuring mikir sorangan 'Ieu tiasa surga atanapi ieu tiasa naraka Saterusna manéhna hurungkeun lilin Sareng anjeunna nunjukkeun ka kuring jalan Aya sora-sora di koridor Teu sangka kuring ngadéngé maranéhna ngomong
Jeung hayu urang ngaganti hurup ieu:
abcdefghijklmnopqrstuvwxyz
ku ieu:
fcpevqkzgmtrayonujdlwhbxsi
Ku kituna, tinimbang “a”, urang nulis “f”, tinimbang “b”, urang nulis “c” jeung saterusna. Teras kami nampi téks énkripsi ieu:
oy f efjt evdvjl zgkzbfs goréng bgye gy sakumaha zfgj bfja davrr oq porglfd jgdgyk wn lzjowkz lzv fgj wn fzvfe gy lzv egdlfypv g dfb f dzgaavjgyk rgkzl sakumaha zvfe kjvb zvfhs fye sakumaha dgkzl kjvb ega g zfe lo dlon qoj lzv ygkzl Lzvjv dzv dlooe gy lzv eoojbfs g zvfje lzv agddgoy cvrr fye g bfd lzgytgy 'lo asdvrq 'lzgd powre cv zvfhvy oj lzgd powre cv zvrr Lzvy dzv rgl wn f pfyerv fye dzv dzobve av lzv bfs lzvjv bvjv hogpvd eoby lzv pojjgeoj g lzowkzl g zvfje lzva dfs
Pikeun alesan kesederhanaan, sadaya hurup ayeuna hurup leutik. Tangtos, ieu sanés sarat.
Palaksanaan dina Python
Palaksanaan di Python téh lugas: urang nempo unggal hurup, sarta lamun hurup aya dina alfabét, lajeng urang ngagantikeun eta ku konci:
alfabét = "abcdefghijklmnopqrstuvwxyz" key = "fcpevqkzgmtrayonujdlwhbxsi" text = "Di jalan raya gurun poék Angin tiis dina buuk kuring" hasilna = "" pikeun hurup dina téks: lamun letter.lower () dina alfabét: hasil += konci[alphabet.find(letter.lower())] sejenna : hasil += hurup
nyitak (hasil) Enya. Urang rengse. Tapi ieu téh Python, jadi naha henteu simplify eta?
alfabét = "abcdefghijklmnopqrstuvwxyz" key = "fcpevqkzgmtrayonujdlwhbxsi" text = "Di jalan raya gurun poék Angin tiis dina buuk kuring" print ( "" .join ([konci [alphabet.find (a)] lamun a dina alfabét sejenna a pikeun a dina text.lower() ]))
Palaksanaan dina JavaScript
Palaksanaan dina JavaScript ngawengku sababaraha struktur HTML jeung lianna, jadi éta saeutik deui, sanajan gagasan téh sarua:
Nganalisis Éta
Janten, naha Facebook mutuskeun henteu énkripsi sadaya obrolan sareng cipher substitusi? Éta bener basajan megatkeun kode? Kumaha anjeun bakal ngadeukeutan éta? Bruteforcing bakal butuh sababaraha waktu, tur éta teu trivial mariksa lamun boga téks decoded, anjeun kudu pariksa unggal kecap tur dibandingkeun jeung sababaraha kosakata. Masalah sanésna nyaéta sababaraha kecap tiasa janten nami, sapertos “California”, sareng anjeun moal mendakanana. Kusabab urang énkripsi hurup demi hurup, masuk akal pikeun ngadekrip ku cara anu sami. Urang ngitung jumlah hurup dina “téks normal”, sarta manggihan hurup nu patepung leuwih sering. Sebutkeun, upami hurup “e” paling sering dipanggihan, urang mendakan hurup anu paling sering dina téks énkripsi urang, sareng ngagentosna ku “e”. Paling dipikaresep, urang bakal bener. OKÉ. Kumaha urang ngitung? Kuring nyokot lirik tina kawentar “Bohemian Rhapsody” Ratu, sarta diitung hurup:
impor matplotlib.pyplot sakumaha plt alfabét = "abcdefghijklmnopqrstuvwxyz" plt.bar(list(alfabét), [corpus.lower().count(hurup) pikeun hurup dina alfabét])
Di dieu variabel korpus ngandung lirik lengkep. Tungtungna, urang nampi bagan ieu: Frékuénsi hurup dina “Bohemian Rhapsody” Sareng ieu mangrupikeun frékuénsi hurup dina téks énkripsi kami: Frékuénsi hurup dina téks énkripsi Janten, ti dieu, urang tiasa nebak yén “e” sigana énkripsi nganggo “v”, sareng “o” nganggo “z”. Hayu urang nyortir duanana grafik:
impor panda salaku pd df = pd.DataFrame({ "surat": daptar (alfabét), "count": [corpus.lower().count(hurup) pikeun hurup dina alfabét] }) df = df.sort_values("cacah") plt.bar(df["surat"], df["itung"])
Ieu kanggo korpus (“Bohemian Rhapsody”): Sareng ieu kanggo téks énkripsi: Teras we kéngingkeun konci ieu:
gpnkvqayftioedzcxbjlshwmru
vs konci aslina:
fcpevqkzgmtrayonujdlwhbxsi
Sareng ayeuna, éta, tangtosna, henteu akurat Tapi kami parantos nebak sahenteuna sababaraha hurup. Bisa jadi titik awal pikeun guessing nu séjén. Jadi, urang geus hasil gagal megatkeun kode ieu. Sareng kuring teuing naif pikeun gaduh pendekatan ieu. Janten, kuring gancang milarian algoritma dina Internét, sareng mendakan yén éta langkung canggih. Naon anu anjeun kedah laksanakeun nyaéta pikeun ngumpulkeun statistik digram, quadgram, jsb. Janten, urang kedah diajar sapertos “hurup A sering dituturkeun ku hurup T”. Sareng pikeun ieu, urang peryogi korpus anu langkung ageung. Panginten sanés waktos. Kadang urang gagal, enya
kuring miharep anjeun masih ngarasakeun lalampahan ieu.
bubuka: Kumaha Ngabéréskeun Ciphers Substitusi Basajan
Cipher substitusi nyaéta korélasi «hiji-hiji» basajan antara hurup konci sareng hurup pesen anu badé énkripsi. Ieu mangrupikeun jinis cipher anu paling gampang pikeun dipecahkeun, sareng éta sababna anjeun bakal mendakan teka-teki ieu dina koran sareng teka-teki Sudoku. Panginten anjeun henteu kantos maén sareng teka-teki ieu sateuacanna sareng hoyong terang dimana ngamimitian – Abdi ngarepkeun Instructable ieu tiasa ngajawab patarosan anjeun.
Lengkah 1: Kéngingkeun Cryptogram
Cryptograms umumna gampang pisan mendakan. Sapertos anu dinyatakeun sateuacana, aranjeunna tiasa dipendakan dina koran kalayan gampang, sareng pamilarian Google tiasa masihan anjeun langkung seueur cryptograms anu anjeun pikahoyong. Hiji conto situs kalawan loba cryptograms maén kalawan nyaéta http://www.cryptograms.org/play.php.
Lengkah 2: Métode 1: Panjang Kecap sareng Tanda Baca
Lamun cipher dimaksudkeun pikeun jadi bit leuwih hese pikeun megatkeun ku leungeun, sadaya tanda baca bakal ngaleungitkeun sarta hurup bakal jumbled babarengan atawa dipecah jadi idéntik-panjangna «kecap”. Gantina, cryptograms ieu dijieun janten «gampang,» sarta sakumaha misalna, ditinggalkeun ku panjang kecap ditangtoskeun jeung tanda baca. Kuring ngamimitian prosés ngarengsekeun kuring ku ngagambar lingkungan ngarengsekeun dina kertas – métode kuring bisa ditempo dina gambar kadua. Nalika kuring mendakan hubungan hurup, kuring nyirian éta dina alfabét dina garis luhur sareng eusian hurup dina rohangan anu aya di handap. Lamun anjeun mimiti ngawitan decipher cryptogram a, anjeun bakal hoyong ngaidentipikasi kecap hiji-hurup. Basa Inggris boga dua kecap panjang hiji-hurup: «I» jeung «a.» Nyaho ieu, anjeun tiasa ngadamel asumsi lumrah pikeun substitusi hurup kahiji anjeun. Sakali réngsé, anjeun ngaléngkah ka kecap dua-hurup sareng tilu-hurup. Néangan hubungan antara hurup. Contona, upami anjeun ningali kecap dua hurup, «eq,» kecap tilu hurup, «qys,» jeung kecap opat-hurup, «qyiq,» anggapan nu lumrah bakal jadi kecap kahiji bisa jadi «éta,» nu kecap kadua bisa jadi «éta,» jeung kecap katilu bisa jadi «éta,» sabab ieu kecap umum. Titik konci di dieu nyaeta mikir kecap umum tur tingal hubungan hurup antara kecap nyieun hiji asumsi. Kontraksi ngajadikeun substitusi gampang ogé. Upami anjeun ningali kontraksi anu terus-terusan, hurup anu dikontrak sigana mangrupikeun «s,» sanaos, éta ogé tiasa janten «d» atanapi «m.» Dua kontraksi hurup bisa jadi «re,» «ll,» atawa «ve.» Kumpulkeun saloba kecap anu anjeun tiasa ngaliwatan prosés ieu, nganggo alat bantu sapertos http://www.morewords.com/wordsbylength/ pikeun ngadamel asumsi sareng ngajawab kecap. Kuring mendakan prosés ieu mangrupikeun metode anu rélatif laun tapi tiasa dipercaya pikeun ngarengsekeun cryptograms koran. SPOILER: Lengkah saterusna nembongkeun prosés ngarengsekeun cipher munggaran dina cryptogram koran gambar di luhur.
Lengkah 3: Ngarengsekeun Cipher Gambar Kahiji
Anjeun bakal aya bewara kuring lasut sababaraha hurup di ditu di dieu, tapi kuring ngeusi aranjeunna nalika kuring sadar aranjeunna geus lasut dina prosés substitusi. cipher ieu nyandak katuhu sabudeureun sapuluh menit pikeun ngajawab.
Lengkah 4: Métode Alternatif: Frékuénsi Surat
Alesan anu aya di tukangeun kunaon cipher substitusi gampang direngsekeun aya hubunganana sareng prediksi frekuensi unggal hurup. Pesen anu langkung panjang nganggo cipher substitusi langkung gampang direngsekeun sabab langkung seueur conto. Dina gambar anu kahiji, anjeun bakal ningali gambar anu nunjukkeun frékuénsi hurup — kuring ngadamel histogram ieu nganggo artikel Wikipedia, sampling 50,000 hurup. Upami anjeun milarian Google pikeun bagan frekuensi hurup, anjeun bakal mendakan plot anu sami. Gambar kadua nyaéta frékuénsi hurup tina cipher I direngsekeun dina hambalan saméméhna. Sakumaha anjeun tiasa tingali, hurup «p» jeung «j» boga laju lumangsungna pangluhurna. A asumsi lumrah lajeng bakal yén hiji hurup pakait jeung «e,» hurup paling umum, sarta séjén kudu pakait jeung «t,» hurup paling umum kadua. Anjeun tiasa make kombinasi metodeu ngajawab-demi-leungeun saméméhna jeung métode frékuénsi hurup pikeun ngajawab cryptograms leuwih gancang. ——————————————— Kuring geus kaasup hiji file .jar laksana I wrote anjeun bisa make pikeun nganalisis frékuénsi hurup jeung ngahasilkeun plot kawas hiji urang geus gambar di luhur. File sumber anu rangkep dina file .jar, upami anjeun hoyong nimba aranjeunna. Alternatipna, Anjeun bisa ngundeur ngan kode sumber, nu Kuring geus napel dieu ogé.
Lengkah 5: Senang Deciphering!
Upami anjeun gaduh patarosan, mangga naroskeun dina koméntar! Janten Anu Pangheulana Bagikeun
Rekomendasi
- Kumaha ngaréspon kana koméntar ngeunaan beurat anjeun
- Kumaha nyageurkeun létah saatos tuang permen haseum
- Kumaha ngareset Lenovo thinkpad x131e Chromebook
- Kumaha ngajual tanah
- Kumaha ngabersihan kapang tina beton