Daha önceki yazımda şifrelemenin ne demek olduğunu ve neden ihtiyaç duyduğumuzdan bahsetmiştik. Bu yazımda da caesar şifrelemenin ne olduğunu anlatacağım. Aynı zamanda bu şifrelemeye bir kod örneği de vereceğim. Keyifli okumalar 🙂
İçindekiler Tablosu
Caesar Şifreleme Nedir?
Caesar şifreleme, adını Roma İmparatoru Julius Caesar’dan alan ve tarihin ilk kriptoloji algoritmalarından biri olan basit bir şifreleme tekniğidir. MÖ Roma İmparatoru Jul Sezar bu şifreleme yöntemi devlet haberleşmeleri için kullanıyordu. Yöntemlerden ilki bir yazıdaki harflerin yerlerini değiştirerek, ikincisi ise harfleri başka harflerle değiştirerek elde ediliyordu. Bu şifreleme yönteminde metindeki her bir harf alfabetik sıraya göre 3 harf ileri kaydırılarak şifreleme işlemi yapar ve bu kaydırma miktarı “şifreleme anahtarı” olarak tanımlanır. Şifreli metin çözüleceği zaman ise aynı işlemin tersi uygulanır yani 3 harf geriye kaydırılır.
Daha iyi anlaşılması adına küçük harf ve aynı zamanda Türkçe karakterler ile örnek vereceğim:
Örnek: Yukarıdaki tabloya göre;
Şifreleme anahtarı= 3
“m e r h a b a “ harfleri sırasıyla “ 16 6 21 10 1 2 1” sayılarına denk geliyor. Sırası ile bu sayılara +3 eklediğimizde “ 19 9 24 13 4 5 4 “ oluyor. Daha sonra elde edilen yeni sayılara karşılık gelen harfleri yazılıyor. Bunlar:
“ ö ğ t j ç d ç” harfleridir. Yani “ merhaba “ kelimesinin şifrelenmiş hali “öğtjçdç” harflerinden oluşuyor.
Şifre çözümünde ise sayılardan -3 çıkartarak o sayılara denk gelen harfleri yazarak buluyoruz.
Bu şifreleme yöntemi, tarih boyunca basit gizlilik ihtiyaçlarını karşılamak için kullanılmıştır. Fakat güvenlik açısından çok zayıf bir şifreleme yöntemidir. Bunun sebebi alfabedeki sınırlı sayıda kaydırma seçeneği bulunması böylece kaba kuvvet saldırıları kolayca uygulanabilir.(Şifreleme/Şifre çözme yöntemi gizli değildir).Modern şifreleme yöntemleri Caesar şifrelemeye göre çok daha güvenli ve aynı zamanda da karmaşıktır. Bu nedenle modern şifrelemeyi tercih etmek daha mantıklıdır. Ama biz bu şifrelemeyi atbash şifrelemede de dediğim gibi basit mesajları hızlıca şifrelemek veya arkadaşlarınızla oynayabileceğiniz eğlenceli bir kelime oyununa dönüştürebiliriz.<3
Şimdi bu şifreleme için yazdığımız koda birlikte bakalım. Öncelikle tek tek ne yazdığımızı bakalım:
1. Kısım:
#include <iostream>
#include <string>
#include <iostream> , C++ dilinde standart giriş/çıkış işlemleri yapmak için gerekli olan giriş/çıkış akışlarını yöneten “iostream” kütüphanesini programa ekler. Bu kütüphaneyi, kullanıcıdan veri almak veya ekrana veri yazmak gibi temel giriş/çıkış işlemlerini yapmak için kullandık.
#include <string> , C++ programlarında metin ve karakter dizileri üzerinde işlem yapmak için kullanılan “string” veri türünü ve bu türle ilgili işlevselliği içeren C++ standart kütüphanesini programa ekler ve bu string, metin verilerini daha kolay ve güvenli bir şekilde işlemek için kullanılır.
2.Kısım:
using namespace std;
string caesar_sifreleme(string mesaj, int shift) {
string result = "";
for (int i = 0; i < mesaj.length(); i++) {
if (isupper(mesaj[i])) {
result += char(int(mesaj[i] + shift - 65) % 26 + 65);
}
else {
result += char(int(mesaj[i] + shift - 97) % 26 + 97);
}
}
return result;
}
1.caesar_sifreleme işlevi, iki argüman aldık bunlar şifrelenmesi gereken metin (mesaj) ve kaydırma miktarı (shift).
2.Boş bir dize olan “result“ tanımladık ve biz dizeyi, şifrelenmiş metni biriktirmek için kullandık.
3.Ardından ”mesaj”daki her karakteri işlemek için bir döngü kullandık.
4.Her karakterin büyük harf mi yoksa küçük harf mi olduğunu kontrol etmek için “ispper” işlevini kullandık.
5.Eğer karakter bir büyük harf ise, şifreleme işlemi için ASCII değerini kullanır. ASCII değeri, büyük harflerin A’dan Z’ye sıralandığı bir aralıktır (65’ten 90’a kadar). Dolayısıyla, mesaj[i] karakterinin ASCII değeri üzerine shift değeri eklenir, ardından 65 çıkarılır (bu, büyük harf karakterlerinin A’dan başladığı konumu temsil eder). Son olarak, bu değer 26 ile modülenir (bu, döngüyü alfabenin sonuna sardırır) ve sonuç tekrar 65 eklenerek asıl büyük harf karakterine dönüştürülür.
6.Eğer karakter bir küçük harfse, aynı işlem küçük harf karakterleri için uygulanır. ASCII değeri üzerine shift eklenir, ardından 97 çıkarılır (bu, küçük harf karakterlerinin a’dan başladığı konumu temsil eder), sonrasında 26 ile modülenir ve sonuç tekrar 97 eklenerek asıl küçük harf karakterine dönüştürülür.
7.Sonuç dize olan result’a ekledik.
8.Döngü, tüm metin işlendikten sonra result dizesini döndürür. Bu dize, metnin şifrelenmiş versiyonunu içerir.
3. Kısım
int main() {
string mesaj = "TryHackMe";
int shift = 4;
cout << "Mesaj = " << mesaj << endl;
string sifrele = caesar_sifreleme(mesaj, shift);
cout << "Sifrelenmis Mesaj " << sifrele << endl;
return 0;
}
1. int main()işlevi, programın başlangıcıdır ve programın ana işlevini içerir. ‘TryHackMe’ adında bir metin (mesaj) oluşturulur ve mesaj adlı bir ‘string’ değişkenine atanır.
2. ‘shift’ adında bir tamsayı değişkeni oluşturduk ve bu değişkene 4 değeri atanır. Bu, metindeki her karakterin kaç birim kaydırılacağını belirler.
3.’cout’ kullanılarak “Mesaj = ” ve ‘mesaj ‘ değişkeni ekrana yazdırdık yani, “Mesaj =” metni ve ardından ‘mesaj’ değişkeninin değeri ekranda görüntüledik.
4.caeser_sifreleme işlevi ‘mesaj’ metnini ve ‘shift’ değerini kullanarak metni şifreler sonuç olarak, sifrele adlı bir string değişkenine atamış olduk.
5.’cout ‘kullanılarak “Sifrelenmis Mesaj ” metni ve ‘sifrele‘ değişkeninin değeri ekrana yazdırmış olduk. Yani, şifrelenmiş metin ekranda görüntülemiş olduk.
6.’return’ 0 ifadesi ile main işleminin sona erdiğini ve programın başarıyla tamamlandığını belirttik.
Böylece C++ programını kullanarak , Caesar şifreleme yöntemini kullanarak bir metni belirli bir kaydırma (shift) miktarı ile şifreleyen bir işlevi ve bu işlemin nasıl kullanılacağını gösteren bir örnek uygulama yapmış olduk.
#include <iostream>
#include <string>
using namespace std;
string caesar_sifreleme(string mesaj, int shift) {
string result = "";
for (int i = 0; i < mesaj.length(); i++) {
if (isupper(mesaj[i])) {
result += char(int(mesaj[i] + shift - 65) % 26 + 65);
}
else {
result += char(int(mesaj[i] + shift - 97) % 26 + 97);
}
}
return result;
}
int main() {
string mesaj = "TryHackMe";
int shift = 4;
cout << "Mesaj = " << mesaj << endl;
string sifrele = caesar_sifreleme(mesaj, shift);
cout << "Sifrelenmis Mesaj " << sifrele << endl;
return 0;
}
Son olarak kodun tamamı yukarıdaki gibidir. Umarım faydalı olmuştur. Herkese iyi çalışmalar 🙂
Melisa İrem Aslan
HacktorX YazarıMerhaba ben Melisa İrem Aslan. Adli Bilişim Mühendisliği 3.Sınıf öğrencisiyim. Siber güvenlik ve sızma testi alanlarında kendimi geliştirmek için çalışıyorum. Hacktorx sitesinde blog yazarlığının yanında İnstagram ve Linkedin hesaplarını yönetmekteyim.