Python ile Sezar(Ceasar) Şifrelemesi – Kullanıcı Arayüzü

Şifreleme yaparken karşılaşılabilecek en basit algoritmalardan birisi Sezar(Ceasar) algoritması. Bu algoritmanın anlatımına buradan ulaşabilirsiniz. Basit anlamda harfleri 3’er kaydırarak uygulanıyor. Kodu yazarken 3 sağa kaydırdık, isterseniz kod üzerinde ilgili kısımlarda – ve + işaretlerini değiştirerek sola kaydırabilirsiniz. Wikipedi’de 3 sola kaydırma istiyor. Kuralına tam uygun olsun derseniz bu dediğimi dikkate almanızı öneririm.

Program Python 3 ile yazılmıştır. Tkinter ile basit bir görsel arayüz sunulmuş, harflerin ASCII(gerektiği yerlerde UTF-8) karşılığı da verilmektedir. Kod yazılırken UTF8 desteğinden dolayı Python 3 kullanılmıştır. Dolayısıyla Arapça da Japonca da yazsanız çalışır.

Program şifreleme yapmak dışında şifrelenmiş metni de çözmektedir. İlgili kısımları değiştirerek farklı algoritmalar için de rahatça kullanabilirsiniz. Şu anki halinde giriş ve çıkış için örnek metinler şu şekildedir:

Giriş metni: “www.gurayyildirim.com.tr blog”

Şifrelenmiş metnin UTF8 karşılıkları: 122, 122, 122, 49, 106, 120, 117, 100, 124, 124, 108, 111, 103, 108, 117, 108, 112, 49, 102, 114, 112, 49, 119, 117, 35, 101, 111, 114, 106

Şifrelenmiş çıkış metni: “zzz1jxud||loglulp1frp1wu#eorj”

Şifre çözmek için yazılan kısım da şu şekildedir:

Giriş metni: “šliuhohph#yh#Ţliuh#êù}ph#surjudpĴ”

Çıkış metninin UTF8 karşılığı: 350, 105, 102, 114, 101, 108, 101, 109, 101, 32, 118, 101, 32, 351, 105, 102, 114, 101, 32, 231, 246, 122, 109, 101, 32, 112, 114, 111, 103, 114, 97, 109, 305, 10

Şifresi çözülen metin: “Şifreleme ve şifre çözme programı”

Bu kodu tek başına yazmadım. Bu ve benzeri birkaç kodu Mehmet ve Hilal ile yazmıştık, isimlerini yazmamak olmazdı.

Programın konsol çıktıları çok akla yatkın değil, onları görmezden gelirseniz iyi olur. Denerken kullanmıştık:)

Lafı fazla dolandırdım, kodlar şöyle:

'''
Created on 4 Şub 2014

@author: asdf
'''

from tkinter import *

pencere = Tk()
pencere.title("Ceasar Yöntemiyle Şifreleme")

#unicode serisi:
def geriCevir(x):
    return chr(x)

def yapistir():
    global metin
    metin = giris.get(0.0, END)
    sifre = list(map(f, metin))
    cikis1.delete(0.0,END)
    cikis1.insert(INSERT, str(sifre[:-1])[1:-1])
    print("Ascii li sifre:", sifre)
    sifrelimetin = ''.join(geriCevir(i) for i in sifre)
    cikis2.delete(0.0,END)
    cikis2.insert(INSERT, str(sifrelimetin))
    print("Karakterli şifrenin metin hali:", sifrelimetin)
    cozulen = list(map(coz, sifrelimetin))
    print("Çözülen ASCII'li şifre:", cozulen)
    print("Çözülen Şifrenin Metin Hali:", ''.join(geriCevir(i) for i in cozulen))

def sifreCoz():
    global metin
    metin = giris.get(0.0, END)

    sifre = list(map(coz, metin[:-1]))
    cikis1.delete(0.0,END)
    cikis1.insert(INSERT, str(sifre)[1:-1])
    print("Ascii li sifre:", sifre)
    sifrelimetin = ''.join(geriCevir(i) for i in sifre)
    cikis2.delete(0.0,END)
    cikis2.insert(INSERT, str(sifrelimetin))
    print("Karakterli şifrenin metin hali:", sifrelimetin)
    cozulen = list(map(coz, sifrelimetin))
    print("Çözülen ASCII'li şifre:", cozulen)
    print("Çözülen Şifrenin Metin Hali:", ''.join(geriCevir(i) for i in cozulen))

def f(x):
    return ord(x)+3

def coz(x):
    return ord(x)-3

karsilama = Label(pencere)
karsilama.config(text = u"Ceasar Yöntemiyle Şifreleme ve Çözme")
karsilama.pack()

girisMetni = Label(pencere)
girisMetni.config(text = u"Metni giriniz")
girisMetni.pack()

giris = Text(pencere)
giris.config(width = 40, height = 8, font = "arial 12")
giris.pack()

karsilama1 = Label(pencere)
karsilama1.config(text = u"ASCII Hali")
karsilama1.pack()

cikis1 = Text(pencere)
cikis1.config(width = 40, height = 8, font = "arial 12")
cikis1.pack()

karsilama2 = Label(pencere)
karsilama2.config(text = u"Metin Hali")
karsilama2.pack()

cikis2 = Text(pencere)
cikis2.config(width = 40, height = 8, font = "arial 12")
cikis2.pack()

print("Sezar şifre oluşturma ve kırma")

metin = ""

hesapButon = Button(pencere)
hesapButon.config(text = "Hesapla!",command = yapistir)
hesapButon.pack()

cozButon = Button(pencere)
cozButon.config(text = "Şifre Çöz!",command = sifreCoz)
cozButon.pack()

mainloop()

İyi çalışmalar.

 
comments powered by Disqus