Selam TurkHackTeam Ailesi! Ben an0un ve bugün sizlerle daha önceden yapmış olduğum Orta Seviye Sezar Şifreleme Programını paylaşacağım.
Sezar şifrelemesi, adını Roma İmparatoru Julius Caesar'dan alan ve tarihsel olarak kullanılan en eski şifreleme tekniklerinden biridir. Bu şifreleme yöntemi, basit bir taşıma algoritması ile metni şifrelemeyi amaçlar. Şifreleme işlemi, alfabedeki her harfi belirli bir sayı kadar kaydırarak yapılır. Örneğin, eğer kaydırma miktarı 3 ise, 'A' harfi 'D' harfine, 'B' harfi 'E' harfine dönüşür.
Sezar şifrelemesinin çalışma prensibi oldukça basittir. Şifrelemek istediğiniz metindeki her harfi, belirlenen kaydırma miktarı kadar ileriye kaydırırsınız. Aynı şekilde, şifre çözme işleminde de harfler geri kaydırılır. Türkçe Karakter kullanmamamız gerekiyor kod gereği.
Şifreleme Adımları:
- Kayıt Miktarını Belirleme: Şifrelemede kullanılacak kaydırma miktarını seçin. Bu genellikle bir sayı ile ifade edilir.
- Harfleri Kaydırma: Metindeki her harfi, belirlenen kaydırma miktarı kadar ileriye kaydırın. Alfabede sonuna geldiğinizde, başa dönerek devam edin (döngüsel olarak).
Örnek:
- Kaydırma Miktarı: 4
- Orijinal Metin: "Turk Hack Team"
- Şifreli Metin: "Xyvo Lego Xieq"
Şimdi işin kod kısmına geçelim. Normalde bunu @DogAnLi hocam sayesinde tanıştığım flet kütüphanesi ile yapacaktım. Fakat bu kütüphaneyi yeni öğrendim ve bu yüzden kendime bu kütüphaneyi pekiştirmek için biraz zaman vermek istedim. Hocamın yararlı konusunu bu konunun altına ekledim. Eğer sizde flet kütüphanesini öğrenmek istiyorsanız bu konunun sonundan konu linkine ulaşabilirsiniz. Hadi geçelim artık koda!
Python:
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
root = tk.Tk()
root.title("HetraPT")
root.geometry("225x140")
textbox = tk.Entry(root)
bilgilendirme = tk.Label(root, text="Yukarıda Bulunan Kutucuğa\nŞifreleme Yöntemi İçin Sayı Giriniz")
textbox.pack()
bilgilendirme.pack()
textbox_degeri = ""
def txt_sec():
global dosya_adi2
dosya_adi2 = filedialog.askopenfilename(title="Dosya Seç")
def dosyayi_coz():
global dosya_adi2
with open(dosya_adi2, "r") as file:
icerik = file.read()
for i in range(len(icerik)):
if ord(icerik[i]) > 127:
messagebox.showerror("Crypt Edilemedi","Dosyada Türkçe Karakterler Bulunuyor!")
return
decrypt_icerik = ""
for i in range(len(icerik)):
karakter = icerik[i]
if karakter.isalpha():
decifre_karakter = chr(ord(karakter) + int(textbox.get()))
else:
decifre_karakter = karakter
decrypt_icerik += decifre_karakter
with open(f"{dosya_adi2}_crypted.txt", "w") as file:
file.write(decrypt_icerik)
messagebox.showinfo("Crypt Başarılı","Dosya Başarıyla Şifrelendi!")
def decrypt_et():
global dosya_adi2
with open(dosya_adi2, "r") as file:
icerik2 = file.read()
for i in range(len(icerik2)):
if ord(icerik2[i]) > 127:
messagebox.showerror("Decrypt Edilemedi","Dosyada Türkçe Karakterler Bulunuyor!")
return
decrypt_icerik2 = ""
for i in range(len(icerik2)):
karakter2 = icerik2[i]
if karakter2.isalpha():
decifre_karakter2 = chr(ord(karakter2) - int(textbox.get()))
else:
decifre_karakter2 = karakter2
decrypt_icerik2 += decifre_karakter2
with open(f"{dosya_adi2}_decrypted.txt", "w") as file:
file.write(decrypt_icerik2)
messagebox.showinfo("Decrypt Başarılı","Dosya Başarıyla Decrypt Edildi!")
btn_sec = tk.Button(root, text="Dosya Seç", command=txt_sec)
btn_decrypt = tk.Button(root, text="Crypt", command=dosyayi_coz)
btn_dosyayi_coz = tk.Button(root, text="Decrypt", command=decrypt_et)
btn_sec.pack()
btn_decrypt.pack()
btn_dosyayi_coz.pack()
btn_sec.config(command=txt_sec)
btn_decrypt.config(command=dosyayi_coz)
btn_dosyayi_coz.config(command=decrypt_et)
root.mainloop()
Şimdi sizlere bu kodu açıklayayım.
Python:
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
Python:
root = tk.Tk()
root.title("HetraPT")
root.geometry("225x140")
textbox = tk.Entry(root)
bilgilendirme = tk.Label(root, text="Yukarıda Bulunan Kutucuğa\nŞifreleme Yöntemi İçin Sayı Giriniz")
textbox.pack()
bilgilendirme.pack()
textbox_degeri = ""
textbox adında bir TextBox ve bilgilendirme adında bir Label oluşturduk. Daha sonra oluşturduğumuz TextBox'u ve Label'i pack() kullanarak en üst ve ortaya gelecek şekilde hizalayarak yerini belirttik. Yerlerini istediğiniz gibi ayarlamak istiyorsanız pack() yerine place(rely= ydegeri ,relx= xdegeri) kullanmalısınız. En sonda ise textbox_degeri diye bir değişken oluşturduk.
Python:
def txt_sec():
global dosya_adi2
dosya_adi2 = filedialog.askopenfilename(title="Dosya Seç")
txt_sec() adında bir fonksiyon oluşturduk. Fonksiyonun içinde kullandığımız global dosya_adi2'yi, dosya_adi2 adlı değişkeni sadece bu fonksiyonda kullanmayacağımız için kullandık. Bizler bir fonksiyonun içinde kullandığımız değişkeni başka fonksiyonlarda da kullanmak istiyorsak global kullanırız. Çünkü global komutu değişkenimizi adı üstünde globale, istediğimiz fonksiyonda kullanabileceğimiz hale getirir. dosya_adi2 adında buton görünümlü filedialog oluşturduk ve açılan pencerenin başlığını Dosya Seç olarak ayarladık. Oluşturduğumuz bu filedialog, basıldığında dosya seçmemizi sağlar.
Python:
def dosyayi_coz():
with open(dosya_adi2, "r") as file:
icerik = file.read()
for i in range(len(icerik)):
if ord(icerik[i]) > 127:
messagebox.showerror("Crypt Edilemedi","Dosyada Türkçe Karakterler Bulunuyor!")
return
decrypt_icerik = ""
for i in range(len(icerik)):
karakter = icerik[i]
if karakter.isalpha():
decifre_karakter = chr(ord(karakter) + int(textbox.get()))
else:
decifre_karakter = karakter
decrypt_icerik += decifre_karakter
with open(f"{dosya_adi2}_crypted.txt", "w") as file:
file.write(decrypt_icerik)
messagebox.showinfo("Crypt Başarılı","Dosya Başarıyla Şifrelendi!")
dosya_adi2 adlı değişkende kullanıcıya seçtirdiğimiz dosyayı r yetkisiyle (read, okuma yetkisi) açtık, içindeki veriyi icerik adlı değişkene aktardık. for döngümüzü icerik değişkeninin uzunluğu kez çalıştırdık. Altındaki if koşulu ile dosyanın içinde Türkçe karakter olup olmadığını kontrol ettik. Varsa bir hata mesajı vermesini sağladık. for döngüsünü icerik değişkeninin uzunluğu kadar tekrar çalıştırdık ve altındaki icerik değişkeninin i 'nci indexini karakter değişkenine aktardık. Bu sayede karakter değişkenimiz dosyadan aldığımız metinin i'nci harfi olmuş oldu. if koşulumuzla karakter değişkeninin harften oluşup oluşmadığına baktık. Daha sonra karakter değişkenimizdeki harfi textbox adlı TextBox'tan aldığımız değer kadar pozitif (+) yönde kaydırdık ve bunu decifre_karakter değişkenine kaydettik. for döngüsünün her çalışmasında decifre_karakter değişkenimizi decrypt_icerik değişkenimize aktarmasını sağladık ve bu sayede kelime(ler) / harf grubu(lar) elde etmiş olduk. En sonda ise kullanıcının seçtiği dosyanın olduğu dizinde yeni bir dosya oluşturduk ve bunun adını kullanıcının seçtiği dosyanın adına _crypted ekleyerek belirledik. Uzantısını .txt olarak ayarladık ve dosyanın şifrelendiğine dair bir mesaj kutusu oluşturduk. Artık dosyamızdaki metin şifrelendi.
Python:
def decrypt_et():
with open(dosya_adi2, "r") as file:
icerik2 = file.read()
for i in range(len(icerik2)):
if ord(icerik2[i]) > 127:
messagebox.showerror("Decrypt Edilemedi","Dosyada Türkçe Karakterler Bulunuyor!")
return
decrypt_icerik2 = ""
for i in range(len(icerik2)):
karakter2 = icerik2[i]
if karakter2.isalpha():
decifre_karakter2 = chr(ord(karakter2) - int(textbox.get()))
else:
decifre_karakter2 = karakter2
decrypt_icerik2 += decifre_karakter2
with open(f"{dosya_adi2}_decrypted.txt", "w") as file:
file.write(decrypt_icerik2)
messagebox.showinfo("Decrypt Başarılı","Dosya Başarıyla Decrypt Edildi!")
Python:
btn_sec = tk.Button(root, text="Dosya Seç", command=txt_sec)
btn_decrypt = tk.Button(root, text="Crypt", command=dosyayi_coz)
btn_dosyayi_coz = tk.Button(root, text="Decrypt", command=decrypt_et)
btn_sec.pack()
btn_decrypt.pack()
btn_dosyayi_coz.pack()
btn_sec.config(command=txt_sec)
btn_decrypt.config(command=dosyayi_coz)
btn_dosyayi_coz.config(command=decrypt_et)
root.mainloop()
.config ile bu butonlara bastığımızda istediğimiz fonksiyonların çalışmasını sağladık. En sondaki root.mainloop() ile bu arayüzün biz kapatmadığımız sürece sürekli açık kalmasını sağladık.
Sonunda bitti. Dostlarım işlemlerimiz bu kadar. Bana vakit ayırdığınız için sizlere teşekkür ederim. İyi günler!
@DogAnLi hocamın
flet kütüphanesi hakkında oluşturduğu konu. Tıklayın.Python Flet Kütüphanesini Bir Projeyle Tanıyalım

Son düzenleme:



