PythonYazılım

Python ile Sezar Şifrelemesi Algoritması

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ı tablosu

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

İlgili Makaleler

Bir cevap yazın

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

Başa dön tuşu
Kapalı