logo

Cēzara šifrs Python valodā

Šajā apmācībā mēs izpētīsim vienu no šifrēšanas metodēm, ko sauc par Cēzara šifru. Tā ir daļa no kriptogrāfijas.

Ievads

Šajā tehnikā katra rakstzīme tiek aizstāta ar burtu noteiktā fiksētā cipara vietā, kas atrodas vēlāk vai pirms alfabēta. Piemēram - alfabēts B tiek aizstāts ar divām pozīcijām uz leju D. D kļūtu par F un tā tālāk. Šī metode ir nosaukta populāro frikcijas varoņu Jūlija Cēzara vārdā, kurš to izmantoja, lai sazinātos ar amatpersonām.

Lai to īstenotu, tiek izmantots algoritms. Sapratīsim sekojošo.

Cēzara šifrēšanas algoritma iezīme

Šis algoritms sastāv no dažām funkcijām, kas ir norādītas tālāk.

  • Šis paņēmiens ir diezgan vienkāršs šifrēšanas lietošanā.
  • Katrs teksts tiek aizstāts ar fiksēto pozīciju uz leju vai augšup ar alfabētu.
  • Tas ir vienkāršs aizstājējšifra veids.

Ir nepieciešama vesela skaitļa vērtība, lai definētu katru pēdējo teksta daļu, kas ir pārvietota uz leju. Šī veselā skaitļa vērtība ir pazīstama arī kā maiņa.

personāla atlases komisijas nozīme

Mēs varam attēlot šo jēdzienu, izmantojot modulāro aritmētiku, vispirms pārveidojot burtu skaitļos, saskaņā ar shēmu A = 0, B = 1, C = 2, D = 3…….. Z = 25.

java skeneris nākamais

Lai pārvietotu n burtu, var izmantot šādu matemātisko formulu.

Kā atšifrēt?

Atšifrēšana ir tāda pati kā šifrēšana. Mēs varam izveidot funkciju, kas veiks pāreju pretējā virzienā, lai atšifrētu oriģinālo tekstu. Tomēr mēs varam izmantot šifra ciklisko īpašību zem moduļa.

Šifrs(n) = atšifrējums (26-n)

To pašu funkciju var izmantot atšifrēšanai. Tā vietā mēs modificēsim maiņas vērtību tā, lai nobīdes = 26 - maiņa.

Cēzara šifrs Python valodā

Sapratīsim šādu piemēru -

java apakšvirknes funkcija

Piemērs -

 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)) 

Izvade:

 Plain txt : CEASER CIPHER EXAMPLE Shift pattern : 4 Cipher: HJFXJWsHNUMJWsJCFRUQJ 

Iepriekš minētais kods ir šķērsojis rakstzīmi vienlaikus. Tas pārsūtīja katru rakstzīmi atbilstoši likumam atkarībā no teksta šifrēšanas un atšifrēšanas procedūras.

Mēs esam definējuši dažas konkrētas pozīciju kopas, kas ģenerēja šifrētu tekstu.

Cēzara šifrēšanas algoritma pārkāpums

Mēs varam uzlauzt šifrētu tekstu dažādos veidos. Viens no veidiem ir Brutālā spēka tehnika, kas ietver visu iespējamo atšifrēšanas atslēgu izmēģināšanu. Šī tehnika nav tik grūta un neprasa daudz pūļu.

Sapratīsim šādu piemēru.

Piemērs -

 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:>

Transponēšanas šifrs

Transponēšanas šifrēšanas algoritms ir paņēmiens, kurā alfabēta secība vienkāršajā tekstā tiek pārkārtota, veidojot šifrētu tekstu. Šis algoritms neatbalsta faktiskos vienkāršā teksta alfabētus.

javafx

Izpratīsim šo algoritmu, izmantojot piemēru.

Piemērs -

Mēs ņemsim vienkāršu piemēru, ko sauc par kolonnu transponēšanas šifru, kur mēs rakstām katru rakstzīmi sāpju tekstā horizontāli ar noteiktu alfabēta platumu. Vertikāli rakstītie teksti ir šifrēti, kas rada pilnīgi atšķirīgu šifrētu tekstu.

Ņemsim vienkāršu tekstu un pielietosim vienkāršo kolonnu transponēšanas paņēmienu, kā parādīts tālāk.

Cēzara šifrs Python valodā

Mēs ievietojām vienkāršu tekstu horizontāli, un šifrētais teksts tiek izveidots vertikālā formātā: hotnejpt.lao.lvi. Lai to atšifrētu, uztvērējam ir jāizmanto tā pati tabula, lai atšifrētu šifrēto tekstu uz vienkāršu tekstu.

java ir nākamais

Kods -

Sapratīsim šādu piemēru.

 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;)) 

Paskaidrojums -

Iepriekš minētajā kodā esam izveidojuši funkciju ar nosaukumu split_len(), kas izspļāva sāpju teksta rakstzīmi, kas ievietota kolonnu vai rindu formātā.

The kodēt () metode izveidoja šifrētu tekstu ar atslēgu, kas norāda kolonnu skaitu, un mēs esam izdrukājuši katru šifrēto tekstu, izlasot katru kolonnu.

Piezīme. Transponēšanas tehnika ir paredzēta kā ievērojams kriptovalūtu drošības uzlabojums. Kriptanalītiķis novēroja, ka šifrētā teksta atkārtota šifrēšana, izmantojot to pašu transponēšanas šifru, parāda labāku drošību.