Sezar şifrelemesi bilinen ilk şifreleme tekniğidir. İlkel bir şifreleme yöntemi olan Sezar şifrelemesi adından da anlaşılacağı gibi Jul Sezar tarafından kullanılmıştır ve adını buradan almıştır.
Kullanım amacı ise savaş zamanında gönderilen mesajların düşman tarafından ele geçirildiğinde okunmasını önlemek.
Günümüzde bu yöntemle şifrelenmiş mesajları çözmek çok zor değildir. Örneğin Türkçe bir metni bu yöntemle şifrelersek sadece 28 denemede metin çözülebilir. Ama tabii ki bu algoritmayı dönemin şartlarına göre değerlendirmemiz gerekiyor ve o zamanlara göre oldukça zeki bir buluş.
Sezar şifrelemesi nasıl yapılır?
Sezar şifrelemesi oldukça basit bir yöntemdir. Belirlenen anahtar değere göre harfleri kaydırarak oluşturur.
Hemen bir örnek yapalım.
Şifrelemek istediğimiz metin “yazılım aktif” olsun. Ve anahtar değerimiz ise 2.
Şimdi cümledeki herbir harfin yerine 2 harf sonrasındaki harfi yazacağız.
Y -> A
A -> C
Z -> B
I -> J
L -> N
I -> J
M -> O
A -> C
K -> M
T -> V
İ -> K
F -> H
Şifreli hali “acbjnjo cmvkh” olarak elde ediyoruz.
ASCII sayı tablosunda alfabe 26 karakter içerir. Türkçe karakterler buna dahil değildir.
Yazdığımız kodlarda bu değerlerden faydalanacağız. Verilen harflerin ASCII değerlerini arttırıp, azaltarak yeni harfler elde edeceğiz.
Programda kullandığımız fonksiyonların açıklamasını yapalım.
ord() = verdiğimiz uzunluğu bir olan string değerini Unikod sayı karşılığını temsil eden bir integer haline dönüştürüyor.
chr() = verdiğimiz Unikod sayı karşılığını temsil eden bir integer değerini string değerine dönüştürür.
isalpha() = verdiğimiz değerin alfabede olup olmadığını kontrol eder.
isupper() = verilen string’in büyük harf olup olmadığını kontrol eder. String içindeki bütün değerler büyük harf ise true değerini döndürür.
islower() = verilen string’in küçük harf olup olmadığını kontrol eder. String içindeki bütün değerler küçük harf ise true değerini döndürür.
getMessage() fonksiyonumuzda mesajı şifreleme ve çözme işlemlerini gerçekleştiriyoruz. Metindeki herbir harfin unicode değerinin kullanıcıdan aldığımız anahtar değer kadar ilerletiyoruz. Eğer a stringinin unicode değerinden küçükse 26 ekliyoruz. Z stringinin unicode değerinden büyükse de 26 çıkartıyoruz. Bu işlemlerin sebebi alfabe üzerinde 26 harf var ve bu harflerin değerlerinde bir sonuç çıkmalı.
MAX_KEY_VALUE=26 def getType(): while True: type = input("Encrypt or Decrypt? (e or d)") if(type=="e" or type=="d"): return type else: print("You must enter e for encrypt or d for decrypt") def getKey(): while True: key = int(input("Enter a key value between 1-{}".format(MAX_KEY_VALUE))) if(key>=1 and key<=26): return key else: print("You must enter a number between 1-{}".format(MAX_KEY_VALUE)) def getMessage(message,key,type): if type == "d": key = -key translated = "" for letter in message: if letter.isalpha(): newLetter = ord(letter) newLetter += key if letter.isupper(): if newLetter > ord("Z"): newLetter -= 26 elif newLetter < ord("A"): newLetter += 26 elif letter.islower(): if newLetter > ord("z"): newLetter -= 26 elif newLetter < ord("a"): newLetter += 26 translated +=chr(newLetter) else: translated+=letter return translated type = getType() key = getKey() message = input("Enter a message: ") print("Translated message: {}".format(getMessage(message,key,type)))