logo

Python'da Sezar Şifresi

Bu derste Sezar Şifresi adı verilen şifreleme yöntemlerinden birini inceleyeceğiz. Kriptografinin bir parçasıdır.

giriiş

Bu teknikte, her karakter, alfabenin ilerisinde veya öncesinde belirli bir sabit sayı pozisyonundaki bir harfle değiştirilir. Örneğin - Alfabe B'nin yerine iki konum aşağı D gelir. D, F olur vb. Bu yöntem, adını yetkililerle iletişim kurmak için kullanan popüler sürtünme karakterlerinden Julius Caesar'dan almıştır.

Bunu uygulamak için kullanılan bir algoritma var. Aşağıdakileri anlayalım.

Sezar Şifreleme Algoritmasının Özelliği

Bu algoritma aşağıda verilen birkaç özellikten oluşmaktadır.

  • Bu tekniğin uygulanması oldukça basittir.
  • Her metin, alfabeyle birlikte sabit sayıda aşağı veya yukarı konumla değiştirilir.
  • Basit bir yedek şifre türüdür.

Aşağıya taşınan metnin her sonuncusunu tanımlamak için bir tamsayı değeri gereklidir. Bu tam sayı değeri aynı zamanda kaydırma olarak da bilinir.

her biri için daktilo

Bu kavramı, A = 0, B = 1, C = 2, D = 3…….. Z = 25 şemasına göre önce harfi sayılara dönüştürerek modüler aritmetik kullanarak temsil edebiliriz.

N harfini kaydırmak için aşağıdaki matematiksel formül kullanılabilir.

Şifre nasıl çözülür?

Şifre çözme, şifreleme ile aynıdır. Orijinal metnin şifresini çözmek için ters yolda kaydırmayı gerçekleştirecek bir fonksiyon oluşturabiliriz. Ancak modül altında şifrenin döngüsel özelliğini kullanabiliriz.

kayıtlı program kontrolü

Şifre(n) = Şifre çözücü(26-n)

Aynı işlev şifre çözme için de kullanılabilir. Bunun yerine kaydırma değerini şu şekilde değiştireceğiz: kaydırmalar = 26 - vardiya.

Python'da Sezar Şifresi

Aşağıdaki örneği anlayalım -

Örnek -

veri bağımsızlığını açıklamak
 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)) 

Çıktı:

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

Yukarıdaki kod her defasında karakterin üzerinden geçmiştir. Metnin şifreleme ve şifre çözme prosedürüne bağlı olarak her karakteri kurala göre aktarır.

Şifreli bir metin oluşturan birkaç spesifik konum kümesini tanımladık.

Sezar Şifreleme Algoritmasının İhlali

Şifreli metni çeşitli şekillerde hackleyebiliriz. Yollardan biri Kaba Kuvvet Tekniği, bu, mümkün olan her şifre çözme anahtarının denenmesini içerir. Bu teknik o kadar da zor değil ve fazla çaba gerektirmiyor.

Aşağıdaki örneği anlayalım.

Örnek -

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

Transpozisyon Şifresi

Transpozisyon şifreleme algoritması, düz metindeki alfabe sırasının şifreli bir metin oluşturacak şekilde yeniden düzenlendiği bir tekniktir. Bu algoritma gerçek düz metin alfabelerini desteklemiyor.

Linux kısayolları

Bir örnek kullanarak bu algoritmayı anlayalım.

Örnek -

Ağrı metnindeki her karakteri belirtilen alfabe genişliğinde yatay olarak yazdığımız sütunlu transpozisyon şifresi adı verilen basit örneği ele alacağız. Dikey olarak yazılan metinler şifrelidir ve tamamen farklı bir şifreli metin oluşturur.

Düz bir metin alalım ve aşağıda gösterildiği gibi basit sütunlu aktarma tekniğini uygulayalım.

aritmetik mantık Birimi
Python'da Sezar Şifresi

Düz metni yatay olarak yerleştirdik ve şifreli metin dikey formatta şu şekilde oluşturuldu: hotnejpt.lao.lvi. Bunun şifresini çözmek için, alıcının şifreli metnin şifresini düz metne çözmek için aynı tabloyu kullanması gerekir.

Kod -

Aşağıdaki örneği anlayalım.

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

Açıklama -

Yukarıdaki kodda adında bir fonksiyon oluşturduk. split_len(), sütunlu veya satır biçiminde yerleştirilmiş, acı metin karakterini tüküren.

kodlama() Yöntem, şifreli metni sütun sayısını belirten bir anahtarla oluşturdu ve her bir şifreli metni, her sütunu okuyarak yazdırdık.

Not - Aktarım tekniğinin kripto güvenliğinde önemli bir gelişme olması amaçlanmaktadır. Kriptanalist, şifre metninin aynı transpozisyon şifresini kullanarak yeniden şifrelenmesinin daha iyi güvenlik sağladığını gözlemledi.