Konumuza direkt girmeden önce birkaç kavram öğrenmemiz gerekiyor ve bunlardan biri de kriptografi nedir? ne amaç için kullanılır?
Kriptografi Nedir?
kriptografi, bilgileri gizli ve güvenli bir şekilde korumak için kullanılan bir bilim dalıdır. Kısacası, kriptografi, mesajları veya verileri başkalarının anlamasını zorlaştıran bir yöntemdir.
Hayal et ki seninle bir arkadaşın var ve seninle sır paylaşmak istiyor. Ama bu sırrın sadece sizin aranızda kalmasını istiyorsunuz. İşte bu noktada kriptografi devreye giriyor. Kriptografi, sizin sırrınızı başkalarının anlamasını zorlaştırarak korur.
Bunun için bazı özel matematiksel yöntemler kullanılır. Mesela, şifreleme denilen bir işlem yapılır. Şifreleme, bir mesajı anlaşılmaz hale getirir. Böylece sadece doğru şifreye sahip olan kişi, mesajı anlayabilir.
Şifrelemek için bazı anahtarlar kullanılır. Anahtarlar, şifreleme ve şifre çözme işlemlerinde kullanılan özel kodlardır. Sadece doğru anahtara sahip olan kişi, şifreli mesajı okuyabilir veya şifreli mesajı oluşturabilir.
CAESAR CİPHER(Sezar Şifreleme):
Sezar şifrelemesi, tarih boyunca kullanılan en eski şifreleme yöntemlerinden biridir. Romalılar tarafından iletişimde kullanıldığı düşünülüyor. ismini Roma İmparatoru Jül Sezar’dan almış bir şifreleme yöntemidir. Bu yöntemde, harfler belirli bir sayıyla kaydırılarak şifreli bir mesaj oluşturulur.

Bir örnek üzerinden anlatalım: Diyelim ki “MERHABA” kelimesini şifrelemek istiyoruz ve kaydırma sayısı 3 olsun. İlk olarak, alfabedeki harfleri düşünerek kaydırma işlemi yaparız.
A – B – C – D – E – F – G – H – I – J – K – L – M – N – O – P – Q – R – S – T – U – V – W – X – Y – Z
Şimdi her harfi üç adım kaydırarak yeni harflerle değiştirelim:
M -> P
E -> H
R -> U
H -> K
A -> D
B -> E
A -> D
Bu şekilde, “MERHABA” kelimesi “PHUKDED” şeklinde şifrelenmiş oldu.
Şifreli mesajı çözmek için ise aynı işlemi tam tersine uygulamamız yeterli olur. Yani şifreli mesajdaki her harfi geriye doğru üç adım kaydırarak asıl mesajı elde ederiz.
Sezar şifrelemesi, basit bir şifreleme yöntemi olduğu için kolayca çözülebilir. Bu yöntem, harflerin kaydırılma miktarını değiştirerek daha güçlü hale getirilebilir.
Evet ana konumuza gelelim şimdi Python ile sezar şifreleme algoritması ile nasıl Encrypt ve Decryot yaparız?
bu sorunun çeşitli cevapları var yani birden fazla şekilde encode ve decode edilebilir. Fakat ben sizlere 2 farklı yol göstereceğim birini anlayamazsanız diğerini anlarsın yada ikisini de kolayca anlarsınız.
1.YOL:
Öncelikle Kodları vereceğim daha sonrasında ise satır satır kodları açıklayacağım. Ve eğer ASCII tablosu ile aranız iyiyse ve onluk sistemi biliyorsanız bunu çok kolay şekilde anlayacaksınız. Ama eğer onluk sistemi ve ASCII tablosunu bilmiyorsanız 2.yola Bakmanızı tavsiye ederim onu daha iyi algılayabilirsiniz. Fazla uzatmadan 1.yola bakalım.
ENCRYPT(ŞİFRELEME):
def sifrele():
anahtar = int(input("Anahtarı giriniz: "))
sifrelenicek_metin = input("Şifrelenecek metni giriniz: ")
sifrelenmis = ''.join(chr(ord(i) + anahtar) for i in sifrelenicek_metin)
print(sifrelenmis)
sifrele()
1-) İlk olarak, “sifrele()” adında bir fonksiyon tanımlanıyor. Bu fonksiyon, kullanıcıdan bir anahtar ve şifrelenecek metin girmesini isteyecek ve metni şifreleyecektir.
2-) Kullanıcıdan anahtar değeri almak için “anahtar = int(input(“Anahtarı giriniz: “))” satırı kullanılır. “input()” fonksiyonuyla kullanıcıdan bir değer alınır ve “int()” fonksiyonuyla bu değer tamsayıya dönüştürülerek anahtar değişkenine atanır.
3-)Kullanıcıdan şifrelenecek metni almak için “sifrelenicek_metin = input(“Şifrelenecek metni giriniz: “)” satırı kullanılır. Kullanıcıdan bir metin girmesi istenir ve bu metin “sifrelenicek_metin” değişkenine atanır.
4-) Şifreleme işlemi için “sifrelenmis” adında bir değişken tanımlanır ve bu değişkene şifrelenmiş metin atanır. Şifreleme işlemi, her bir karakterin ASCII değerine anahtar değeri ekleyerek yapılır. Bu, karakterleri birer birer dolaşıp ASCII değerlerini artırarak şifrelenmiş metni oluşturur.
5-) ” ”.join(chr(ord(i) + anahtar) for i in sifrelenicek_metin)” ifadesi kullanılarak her bir karakter için şifreleme işlemi gerçekleştirilir. “ord(i)” ifadesi,” i ” karakterinin ASCII değerini döndürür. Daha sonra bu değere anahtar değeri eklenir ve “chr()” fonksiyonuyla ASCII değeri karaktere dönüştürülerek şifrelenmiş karakter oluşturulur. Son olarak, oluşturulan şifrelenmiş karakterler birleştirilir ve “sifrelenmis” değişkenine atanır.
Son olarak, şifrelenmiş metin print(sifrelenmis) ifadesiyle birlikte ekrana yazdırılıyor.
DECRYPT(DEŞİFRE):
def çöz():
anahtar = int(input("Anahtar dizisini giriniz: "))
sifreli_metin = input("Şifreli metni giriniz: ")
çözülmüş = ''.join(chr(ord(i) - anahtar) for i in sifreli_metin)
print(çözülmüş)
çöz()
- İlk olarak, “
çöz()
” adında bir fonksiyon tanımlıyoruz. Bu fonksiyonla, kullanıcıdan bir anahtar ve çözülecek şifreli metni girmesini istiyoruz ve metni çözecektir. - Kullanıcıdan anahtar değerini almak için “
anahtar = int(input("Anahtar dizisini giriniz: "))
” satırını kullanırız. “input()"
fonksiyonuyla kullanıcıdan bir değer alınır ve “int()"
fonksiyonuyla bu değer tamsayıya dönüştürülerekanahtar
değişkenine atanır. - Kullanıcıdan çözülecek şifreli metni almak için “
sifreli_metin = input("Şifreli metni giriniz: ")"
satırını kullanırız. Kullanıcıdan bir metin girmesi istenir ve bu metin “sifreli_metin
” değişkenine atanır. - Çözme işlemi için
çözülmüş
adında bir değişken tanımlanır ve bu değişkene çözülmüş metin atanır. Çözme işlemi, her bir karakterin ASCII değerinden anahtar değerini çıkartarak yapılır. Bu, karakterleri birer birer dolaşıp ASCII değerlerini azaltarak çözülmüş metni oluşturur.”''.join(chr(ord(i) - anahtar) for i in sifreli_metin)
” ifadesi kullanılarak her bir karakter için çözme işlemi gerçekleştirilir. “ord(i)
” ifadesi, “i
” karakterinin ASCII değerini döndürür. Daha sonra bu değerden anahtar değeri çıkarılır ve “chr()
” fonksiyonuyla ASCII değeri karaktere dönüştürülerek çözülmüş karakter oluşturulur. Son olarak, oluşturulan çözülmüş karakterler birleştirilir veçözülmüş
değişkenine atanır. - Son olarak, çözülmüş metin
print(çözülmüş)
ifadesiyle ekrana yazdırılır.
2.YOL:
Eğer ASCII tablosu ile aranız iyi değil ise bu yöntemi daha çok beğeneceksiniz. Uzatmadan 2.yolumuza geçelim ve yine aynı şekilde önce kodları paylaşacağım sonra satır satır o kodları açıklayacağım.
ENCRYPT(ŞİFRELEME):
def sezar_sifreleyici(metin, kaydirma):
sifrelenmis_metin = ''
alfabe = [
'a', 'b', 'c', 'ç', 'd', 'e', 'f', 'g', 'ğ', 'h', 'ı', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'ö', 'p', 'r', 's', 'ş', 't', 'u', 'ü', 'v', 'y', 'z'
]
for karakter in metin:
if karakter not in alfabe:
sifrelenmis_metin += karakter
else:
sifrelenmis_metin += alfabe[(alfabe.index(karakter) + kaydirma) % len(alfabe)]
return sifrelenmis_metin
kaydirma = int(input('Kaydırma miktarı: '))
metin = input("Mesajınız: ")
sifrelenmis_metin = sezar_sifreleyici(metin, kaydirma)
print("Şifrelenmiş mesaj:", sifrelenmis_metin)
- “
def sezar_sifreleyici(metin, kaydirma):
” satırıyla “sezar_sifreleyici
” adında bir fonksiyon tanımlıyoruz. Bu fonksiyon, “metin
” ve “kaydirma
” olmak üzere iki parametre alır ve metni belirtilen kaydırma miktarıyla şifreler. - “
sifrelenmis_metin = ''
“satırıyla “sifrelenmis_metin"
adında bir boş metin tanımlanır. Bu metin, şifrelenmiş metni tutmak için kullanılacak. - “
alfabe = [...]
” satırıylaalfabe
adında bir liste tanımlanır. Bu liste, Türkçe alfabesinin karakterlerini içerir ve şifreleme işlemi için kullanılacak harfleri belirtir. - “
for karakter in metin:
” satırı,metin
içindeki her bir karakter için döngüyü başlatır. Bu döngü, metindeki her bir karakteri sırayla işlemek için kullanılır. - “
if karakter not in alfabe:
” satırı, eğerkarakter
alfabe listesinde bulunmuyorsa (yani harf değilse) gerçekleşir. Bu durumda, “sifrelenmis_metin
” metnine doğrudankarakter
i eklenir, çünkü harf olmayan karakterler şifreleme işlemine tabi tutulmaz. else:
bloğu,if
bloğunun sağlanmadığı durumda gerçekleşir. Yani,karakter
alfabe listesinde bulunan bir harfse şifreleme işlemi uygulanır.- “
sifrelenmis_metin += alfabe[(alfabe.index(karakter) + kaydirma) % len(alfabe)]
” satırıyla,karakter
in alfabe listesindeki indisini “(alfabe.index(karakter)
)” buluruz. Daha sonra,kaydirma
miktarını bu indise ekleriz ve toplamı “len(alfabe)
” ile modüler aritmetik yaparız. Böylece, kaydırılmış yeni karakterin doğru indise denk gelmesini sağlarız. Bu yeni karakter,"sifrelenmis_metin
” metnine eklenir. - “
return sifrelenmis_metin
” satırıyla, şifrelenmiş metin “sifrelenmis_metin
” olarak döndürülür. - “
kaydirma = int(input('Kaydırma miktarı: '))
” satırıyla kullanıcıdan bir kaydırma miktarı alınır. Bu değer, şifreleme işlemi için kullanılacak harflerin kaydırılma miktarını belirler. Kullanıcıdan alınan değerkaydirma
değişkenine atanır.int()
fonksiyonu kullanılarak girdi tamsayıya dönüştürülür. - “
metin = input("Mesajınız: ")
” satırıyla kullanıcıdan şifrelenecek bir metin alınır. Kullanıcıdan alınan metinmetin
değişkenine atanır. - “
sifrelenmis_metin = sezar_sifreleyici(metin, kaydirma)"
satırıyla “sezar_sifreleyici
” fonksiyonu kullanılarak metin şifrelenir ve şifrelenmiş metin “sifrelenmis_metin
” değişkenine atanır. - ”
print("Şifrelenmiş mesaj:", sifrelenmis_metin)
” satırıyla şifrelenmiş metin ekrana yazdırılır.
DECRYPT(DEŞİFRELEME):
def sezar_desifreleyici(sifreli_metin, kaydirma):
cozulmus_metin = ''
alfabe = [
'a', 'b', 'c', 'ç', 'd', 'e', 'f', 'g', 'ğ', 'h', 'ı', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'ö', 'p', 'r', 's', 'ş', 't', 'u', 'ü', 'v', 'y', 'z'
]
for karakter in sifreli_metin:
if karakter not in alfabe:
cozulmus_metin += karakter
else:
cozulmus_metin += alfabe[(alfabe.index(karakter) - kaydirma) % len(alfabe)]
return cozulmus_metin
kaydirma = int(input('Kaydırma miktarı: '))
metin = input("Mesajınız: ")
cozulmus_metin = sezar_desifreleyici(sifrelenmis_metin, kaydirma)
print("Çözülmüş mesaj:", cozulmus_metin)
- ”
def sezar_desifreleyici(sifreli_metin, kaydirma):
" sezar_desifreleyici
adında bir fonksiyon tanımlanıyor. Bu fonksiyon, şifreli metni ve kaydırma miktarını alarak şifreyi çözecek. - ”
cozulmus_metin = ''
" cozulmus_metin
adında bir boş bir dize oluşturuluyor. Bu dize, çözülmüş metni tutacak. - ”
alfabe = [...]
”alfabe
adında bir liste oluşturuluyor. Bu liste, şifrenin çözülmesinde kullanılacak olan harf alfabelerini içeriyor. - “
for karakter in sifreli_metin:
”sifreli_metin
üzerinde döngü oluşturuluyor. Bu döngü, şifreli metindeki her karakteri tek tek ele alacak. - ”
if karakter not in alfabe:
” Eğer karakter,alfabe
listesinde yer almıyorsa, yani alfabe harflerinden biri değilse:- “
cozulmus_metin += karakter
” Karakter, çözülmüş metne doğrudan ekleniyor.
- “
- “
else:
” Eğer karakter,alfabe
listesinde yer alıyorsa, yani alfabe harflerinden biri ise:- ”
cozulmus_metin += alfabe[(alfabe.index(karakter) - kaydirma) % len(alfabe)]
” Karakterin, alfabe içindeki indeksi bulunuyor. Ardından, kaydırma miktarı çıkarılarak doğru indeks hesaplanıyor ve bu indeksteki karakter çözülmüş metne ekleniyor.
- ”
- “
return cozulmus_metin
” Çözülmüş metin, fonksiyon tarafından döndürülüyor. " kaydirma = int(input('Kaydırma miktarı: '))
” Kullanıcıdan bir kaydırma miktarı alınıyor vekaydirma
değişkenine atanıyor.- ”
metin = input("Mesajınız: ")
” Kullanıcıdan çözülecek olan şifreli metin alınıyor vemetin
değişkenine atanıyor. - ”
cozulmus_metin = sezar_desifreleyici(sifreli_metin, kaydirma)
”sezar_desifreleyici
fonksiyonu çağrılıyor ve şifreli metin ile kaydırma miktarı argüman olarak veriliyor. Çözülen metin, “cozulmus_metin
” değişkenine atanıyor. - ”
print("Çözülmüş mesaj:", cozulmus_metin)
” Çözülen metin ekrana yazdırılıyor.