Kripto [2] – Sezar Şifreleme Algoritması

Bilgiyi paylaşarak çoğalt!!

Herkese merhaba,
Kripto yazı serisinin ikinci serisi olan sezar şifreleme algoritması ile devam edelim. Tarihte Sezar ordusu ile güvenli bir şekilde haberleşmek için bu yöntemi geliştirmiştir. Sezar şifreleme algoritması “monoalfabetik” şifreleme yöntemlerinden biridir. Günümüzde şifreleme yöntemleri çok üstün olduğu için Sezar şifreleme algoritması ilkel şifreleme yöntemlerinden biridir diyebiliriz. Bu şifreleme tekniği kullanmak oldukça güvenlidir diyemeyiz. Sezar şifreleme algoritmasının çalışma yöntemine bakacak olursak;

Şifrelenecek olan metinde ki her harf, 3 harf (kaydırma sayısı 3 burada sabit değildir. İsteğe bağlı olarak değişebilir.) kaydırılarak şifreleme işlemi yapılır. Tabi sezar şifreleme yönteminde kaydırma 3 olarak kullanılmıştır.

“esma” kelimesini Türk alfabesi üzerinde şifreleyecek olursak “ğuöç” şeklinde şifrelenecektir.

Bu işlemi matematiksel denklem olarak ifade edersek;

  • x = şifrelenecek olan harfin indexi
  • y = alfabedeki toplam harf sayısı
  • n = kaydırma sayısı

Encryption(x) = ( x + n ) mod (y)

Encryption(x) = ( x – n ) mod (y)

Sezar şifreleme yöntemi için hazırlamış olduğun basit python kodu aşağıdaki gibidir.

class Caesar:

    def __init__(self, key):        
        #Turkish alphabet
        self.__letters = [ "a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h", "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p", "r", "s", "ş", "t", "u", "ü", "v", "y", "z"]
        
        self.__key = key

    def encrypt(self, plain_text):
        self.__key = abs(self.__key)
        return self.__run_caesar_algorithm(plain_text)
    
    def decrypt(self, cipher_text):
        self.__key = -self.__key
        return self.__run_caesar_algorithm(cipher_text)

    def __run_caesar_algorithm(self, m_text):
        m_text = m_text.lower()
        new_text = ""
        for character in m_text:
            index = self.__get_indexOfLetter(character)
            if index is not None:
                new_text = new_text + self.__get_encrypte_letter(index)
            else:
                new_text = new_text + character
        return new_text


    def __get_indexOfLetter(self, character):
        for index, letter in enumerate(self.__letters):
            if letter == character:
                return index
        return None

    def __get_encrypte_letter(self, index):
        new_index = index + self.__key
        if new_index > (len(self.__letters) - 1) or new_index < 0:
            new_index = new_index % len(self.__letters)
        return self.__letters[new_index]

Python kodunun çalıştırılmış örneği:

message = "batuhan avlayan"
print("Original text: %s " % (message))

m_key = 5
m_caesar = Caesar(m_key)
encrypted_text = m_caesar.encrypt(message)
print("Encrypted text (Caesar - key: %d): %s " % (m_key, encrypted_text))

decrypted_text = m_caesar.decrypt(encrypted_text)
print("Decrypted text (Caesar - key: %d): %s " % (m_key, decrypted_text))

# ------------------Output--------------------------
# Original text: batuhan avlayan
# Encrypted text (Caesar - key: 5): fezales ecpeçes 
# Decrypted text (Caesar - key: 5): batuhan avlayan
# ------------------Output--------------------------

Sezar şifreleme işlemi güvensiz olduğu için brute force atak ile basit bir şekilde çözülebilir. Alfabedeki harf sayısı kadar deneme işlemi yapılarak çözülebilir.

Bir sonraki yazıda görüşmek üzere.. 🙂

Python kodu github link: https://github.com/bavlayan/crypto101/tree/master/Caesar

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir