logo

Cezario šifras Python

Šioje pamokoje išnagrinėsime vieną iš šifravimo metodų, vadinamų Cezario šifru. Tai yra kriptografijos dalis.

Įvadas

Taikant šią techniką, kiekvienas simbolis pakeičiamas raide tam tikroje fiksuoto skaičiaus vietoje, kuri yra vėliau arba prieš abėcėlę. Pavyzdžiui – abėcėlė B pakeičiama dviem pozicijomis žemyn D. D taptų F ir pan. Šis metodas pavadintas populiarių trintis personažų Juliaus Cezario, kuris jį naudojo bendraudamas su pareigūnais, vardu.

Jai įgyvendinti naudojamas algoritmas. Supraskime toliau.

Cezario šifravimo algoritmo funkcija

Šį algoritmą sudaro kelios toliau pateiktos funkcijos.

  • Ši technologija yra gana paprasta taikyti šifravimą.
  • Kiekvienas tekstas pakeičiamas fiksuotu abėcėlės pozicijos skaičiumi žemyn arba aukštyn.
  • Tai paprastas pakaitinio šifro tipas.

Norint apibrėžti kiekvieną paskutinį tekstą, kuris buvo perkeltas žemyn, reikalinga sveikojo skaičiaus reikšmė. Ši sveikojo skaičiaus reikšmė taip pat žinoma kaip poslinkis.

rasti mano iphone iš android

Šią sąvoką galime pavaizduoti naudodami modulinę aritmetiką, pirmiausia raidę paversdami skaičiais, pagal schemą A = 0, B = 1, C = 2, D = 3…….. Z = 25.

Šią matematinę formulę galima naudoti norint perkelti n raidę.

Kaip iššifruoti?

Iššifravimas yra toks pat kaip ir šifravimas. Galime sukurti funkciją, kuri atliks perėjimą į priešingą kelią, kad iššifruotų pradinį tekstą. Tačiau modulyje galime naudoti ciklinę šifro savybę.

Šifravimas (n) = iššifravimas (26-n)

Ta pati funkcija gali būti naudojama iššifruojant. Vietoj to pakeisime poslinkio reikšmę taip, kad poslinkiai = 26 - pamaina.

dvejetainis į bcd
Cezario šifras Python

Supraskime šį pavyzdį -

Pavyzdys -

 def encypt_func(txt, s): result = '' # transverse the plain txt for i in range(len(txt)): char = txt[i] # encypt_func uppercase characters in plain txt if (char.isupper()): result += chr((ord(char) + s - 64) % 26 + 65) # encypt_func lowercase characters in plain txt else: result += chr((ord(char) + s - 96) % 26 + 97) return result # check the above function txt = 'CEASER CIPHER EXAMPLE' s = 4 print('Plain txt : ' + txt) print('Shift pattern : ' + str(s)) print('Cipher: ' + encypt_func(txt, s)) 

Išvestis:

Linux klaidų kodai
 Plain txt : CEASER CIPHER EXAMPLE Shift pattern : 4 Cipher: HJFXJWsHNUMJWsJCFRUQJ 

Aukščiau pateiktas kodas vienu metu perėjo simbolį. Jis perdavė kiekvieną simbolį pagal taisyklę, priklausomai nuo teksto šifravimo ir iššifravimo procedūros.

Apibrėžėme keletą konkrečių pozicijų rinkinių, kurie sugeneravo šifruotą tekstą.

Cezario šifravimo algoritmo pažeidimas

Šifruotą tekstą galime nulaužti įvairiais būdais. Vienas iš būdų yra Brute Force technika, kuris apima visų įmanomų iššifravimo raktų išbandymą. Ši technika nėra tokia sunki ir nereikalauja daug pastangų.

Supraskime šį pavyzdį.

Pavyzdys -

 msg = &apos;rGMTLIVrHIQSGIEWIVGIEWIV&apos; #encrypted msg LETTERS = &apos;ABCDEFGHIJKLMNOPQRSTUVWXYZ&apos; for k in range(len(LETTERS)): transformation = &apos;&apos; for s in msg: if s in LETTERS: n = LETTERS.find(s) n = n - k if n <0: n="n" + len(letters) transformation="transformation" letters[n] else: s print('hacking k #%s: %s' % (k, transformation)) < pre> <p> <strong>Output:</strong> </p> <pre> Hacking k #25: rHNUMJWrIJRTHJFXJWHJFXJW </pre> <h2>Transposition Cipher</h2> <p>Transposition cipher algorithm is a technique where the alphabet order in the plaintext is rearranged to form a cipher text. This algorithm doesn&apos;t support the actual plain text alphabets.</p> <p>Let&apos;s understand this algorithm using an example.</p> <p> <strong>Example -</strong> </p> <p>We will take the simple example called columnar transposition cipher where we write the each character in the pain text in horizontal with specified alphabet width. The vertically written texts are cipher, which create a completely unlike cipher text.</p> <p>Let&apos;s take a plain text, and apply the simple columnar transposition technique as shown below.</p> <img src="//techcodeview.com/img/python-tutorial/89/caesar-cipher-python-2.webp" alt="Caesar Cipher in Python"> <p>We placed the plain text horizontally and the cipher text is created with vertical format as: <strong>hotnejpt.lao.lvi.</strong> To decrypt this, the receiver must use the same table to decrypt the cipher text to plain text.</p> <p> <strong>Code -</strong> </p> <p>Let&apos;s understand the following example.</p> <pre> def split_len(sequence, length): return [sequence[i:i + length] for i in range(0, len(sequence), length)] def encode(k, plaintxt): order = { int(val): n for n, val in enumerate(k) } ciphertext = &apos;&apos; for index in sorted(order.ks()): for part in split_len(plaintxt, len(k)): try:ciphertext += part[order[index]] except IndexError: continue return ciphertext print(encode(&apos;3214&apos;, &apos;HELLO&apos;)) </pre> <p> <strong>Explanation -</strong> </p> <p>In the above code, we have created a function named <strong>split_len(),</strong> which spitted the pain text character, placed in columnar or row format.</p> <p>The <strong>encode()</strong> method created the cipher text with a key specifying the number of columns, and we have printed each cipher text by reading through each column.</p> <h4>Note - The transposition technique is meant to be a significant improvement in crypto security. Cryptanalyst observed that re-encrypting the cipher text using same transposition cipher shows better security.</h4> <hr></0:>

Transponavimo šifras

Transpozicijos šifravimo algoritmas yra metodas, kai abėcėlės tvarka paprastame tekste pertvarkoma, kad būtų sudarytas šifruotas tekstas. Šis algoritmas nepalaiko tikrojo teksto abėcėlės.

mergesort java

Supraskime šį algoritmą naudodami pavyzdį.

Pavyzdys -

Paimsime paprastą pavyzdį, vadinamą stulpelių perkėlimo šifru, kai kiekvieną skausmo teksto simbolį rašome horizontaliai su nurodytu abėcėlės pločiu. Vertikaliai rašomi tekstai yra šifruojami, todėl sukuriamas visiškai nepanašus į šifruotą tekstą.

aštrus kampas

Paimkime paprastą tekstą ir taikykite paprastą stulpelių perkėlimo metodą, kaip parodyta toliau.

Cezario šifras Python

Paprastą tekstą įdėjome horizontaliai, o šifruotas tekstas sukuriamas vertikaliu formatu: hotnejpt.lao.lvi. Norėdami tai iššifruoti, imtuvas turi naudoti tą pačią lentelę, kad iššifruotų šifruotą tekstą į paprastą tekstą.

Kodas -

Supraskime šį pavyzdį.

 def split_len(sequence, length): return [sequence[i:i + length] for i in range(0, len(sequence), length)] def encode(k, plaintxt): order = { int(val): n for n, val in enumerate(k) } ciphertext = &apos;&apos; for index in sorted(order.ks()): for part in split_len(plaintxt, len(k)): try:ciphertext += part[order[index]] except IndexError: continue return ciphertext print(encode(&apos;3214&apos;, &apos;HELLO&apos;)) 

Paaiškinimas -

Aukščiau pateiktame kode sukūrėme funkciją pavadinimu split_len(), kuris išspjaudavo skausmo teksto simbolį, patalpintą stulpelio arba eilutės formatu.

The koduoti () metodas sukūrė šifruotą tekstą su raktu, nurodančiu stulpelių skaičių, ir mes atspausdinome kiekvieną šifruotą tekstą skaitydami kiekvieną stulpelį.

Pastaba – perkėlimo technika yra skirta reikšmingam kriptovaliutų saugumo patobulinimui. Kriptanalitikas pastebėjo, kad šifruoto teksto pakartotinis šifravimas naudojant tą patį perkėlimo šifrą rodo didesnį saugumą.