11.07.2023
16
Beğenme
21231
Görüntülenme
Bu yazıda, tarihteki ilk şifreleme algoritmalarından biri olan Sezar Şifrelemesini (Caesar Cipher) ele alacağız. Keyifli okumalar dilerim :)
Adını ünlü Roma İmparatoru Julius Sezar'dan almış basit bir şifreleme algoritmasıdır. Algoritma her harfin belirlenen adım sayısı (anahtar) kadar ötelenmesine dayanır. Şifreyi çözmek için mesajın yazıldığı dilin alfabesine göre öteleme işlemi yapılmalıdır, aksi taktirde mesaj bulunulamayabilir. Bu çalışmadaki örnekler Türk alfabesini baz alarak hazırlanmıştır.
Julius Sezar, MÖ 1. yüzyılda askeri mesajlarının güvenliğini sağlamak için kendince böyle bir yöntem bulmuştur. Bilinen en eski şifreleme yöntemlerinden biridir. Kolay bir şifreleme yöntemi olduğu için de farklı anahtarlar ile tarih boyunca önemli bir çok mesajın şifrelenmesinde kullanılmıştır.
Örnek bir uygulama olarak "Patika" kelimesini anahtar değeri 3 olacak şekilde şifreleyelim:
Alfabe: ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ
Patika → Tdymod
Dezavantajları:
Esasen avantaj olarak saydığımız şeyler bakış açısına göre dezavantaj olarak da sayılabilir.
Sezar Şifrelemesini Kırmak
Basit bir şifreleme yöntemi olduğu için kırması da oldukça kolaydır. En başlıca yöntemlere bakalım:
Python Kodu
def sezar_sifre(metin, anahtar=3):
alfabe = 'abcçdefgğhıijklmnoöprsştuüvyz'
sifreli_metin = ''
for harf in metin:
if harf.lower() in alfabe:
index = alfabe.index(harf.lower())
otelenmis_index = (index + anahtar+1) % len(alfabe)
if harf.isupper():
sifreli_metin += alfabe[otelenmis_index].upper()
else:
sifreli_metin += alfabe[otelenmis_index]
else:
sifreli_metin += harf
return sifreli_metin
def
anahtar kelimesi ile sezar_sifre()
isimli fonksiyonumuzu tanımladık. Fonksiyon iki adet parametre alıyor, bunlar şifrelenecek metin ve kaç adım ötelenmesini istediğimizi belirten anahtar değeri. Anahtarın varsayılan değeri 3 olarak tanımlı, bu şu anlama gelir, eğer hiç bir değer girilmez ise anahtar otomatik olarak 3 alınır.string
tanımlıyoruz.for
döngüsü başlatıyoruz. Devamında harfin küçük hali (burada alfabedeki harfleri küçük olarak tanımladığımız için harfi lower()
fonksiyonu ile küçültüyoruz) alfabenin içerisinde varsa index'ini belirliyoruz. Harfin alfabedeki konumunu bulduktan sonra harfi şifreleme işlemine geçiyoruz.len()
fonksiyonunu kullandık). Neden mod aldığımıza gelecek olursak, diyelim ki V harfini şifreleyeceğiz, harfin B olmasını ümit ederiz. B harfi de alfabenin 1. index'ine tekabül eder. Mod almadığımız senaryoda ötelenmiş index'in değeri V harfi için 30 olur ama tanımladığımız Türk alfabesi 29 harftir. Dolayısıyla bu değer alfabe için geçerli değildir. Modunu alarak, yani 29'a bölümünden kalanı bularak ötelenmiş index'i 1 buluruz ki bu da B harfine tekabül eder. Bu şekilde, alfabe dairesel bir yapı gibi davranır ve öteleme işlemi her zaman geçerli bir harf üretir.else:
durumunda ise küçük olarak sifreli_metin değişkenine eklenir.return
anahtar kelimesi ile sifreli_metin döndürülür.Dilerseniz fonksiyonu Patika kelimesi ile test edelim:
metin = 'Patika'
sifrele = sezar_sifre(metin)
print(sifrele) #Tdymod
Son olarak Sezar Şifrelemesini kaba kuvvet saldırısı ile kıran algoritmanın koduna aşağıdaki linkten erişebilirsiniz.
sezar_kaba_kuvvet_saldirisi.py
Okuduğunuz için teşekkür ederim, başka algoritmalarda görüşmek üzere :)
Kullanıcı yorumlarını görüntüleyebilmek için kayıt olmalısınız!