İçeriğe geç

PHP ile Sezar Şifrelemesi: Adım Adım Rehber

Sezar şifrelemesi, tarihi çok eski zamanlara dayanan ve oldukça basit bir şifreleme yöntemidir. Roma İmparatoru Julius Caesar tarafından kullanılan bu şifreleme tekniği, harfleri belirli bir kaydırma miktarıyla şifreleyerek güvenliği sağlar. Bu yazımızda, PHP dilinde Sezar şifrelemesini nasıl uygulayacağınızı adım adım göstereceğiz.

Sezar Şifrelemesi Nedir?

Sezar şifrelemesi, metindeki her harfi bir sabit sayı kadar kaydırarak şifreler. Örneğin, eğer kaydırma miktarı 3 ise, “A” harfi “D” olur, “B” harfi “E” olur ve devam eder. Kaydırma miktarı belirli bir sayı ile sınırlıdır ve genellikle 26 (alfabe sayısı) ile çalışır.

Sezar Şifrelemesi Nasıl Çalışır?

Sezar şifrelemesi şu şekilde çalışır:

  1. Kullanıcı, şifrelemek istediği metni girer.
  2. Her bir harf, belirli bir kaydırma miktarına göre değiştirilir.
  3. Şifreli metin elde edilir.
  4. Aynı kaydırma değeriyle şifre çözme işlemi yapılabilir.

Bu yöntemin en büyük dezavantajı, kaydırma değeri bilindiği takdirde şifrenin kolayca çözülebilmesidir. Ancak, eğitim ve uygulama amaçları için oldukça kullanışlıdır.

PHP ile Sezar Şifrelemesi Uygulaması

Şimdi, PHP ile Sezar şifrelemesini nasıl yapabileceğimizi görelim. Aşağıda, kullanıcıdan alınan metni ve kaydırma miktarını kullanarak şifreleme yapan basit bir PHP kodu bulunmaktadır.

PHP Kodunu İnceleyelim
<?php
// Vigenère şifreleme fonksiyonu
function vigenere_sifrele($metin, $anahtar) {
    $sifreli_metin = "";
    $anahtar = strtoupper($anahtar);
    $metin = strtoupper($metin);  // Harfleri büyük yapmak isteğe bağlı

    $anahtar_index = 0;  // Anahtar kelimesi üzerinde gezinme indeks

    for ($i = 0; $i < strlen($metin); $i++) {
        $karakter = $metin[$i];
        
        // Eğer harfse şifrele
        if (ctype_alpha($karakter)) {
            $anahtar_harf = $anahtar[$anahtar_index % strlen($anahtar)];
            $anahtar_deger = ord($anahtar_harf) - ord('A');
            $karakter_deger = ord($karakter) - ord('A');
            
            // Vigenère şifrelemesi (kaydırma işlemi)
            $sifreli_karakter = chr(($karakter_deger + $anahtar_deger) % 26 + ord('A'));
            $sifreli_metin .= $sifreli_karakter;

            // Anahtar kelimesi üzerinde ilerle
            $anahtar_index++;
        } else {
            // Harf dışı karakterler olduğu gibi eklenir
            $sifreli_metin .= $karakter;
        }
    }
    
    return $sifreli_metin;
}

// Vigenère şifre çözme fonksiyonu
function vigenere_coz($sifreli_metin, $anahtar) {
    $cozulmus_metin = "";
    $anahtar = strtoupper($anahtar);
    $sifreli_metin = strtoupper($sifreli_metin);  // Harfleri büyük yapmak isteğe bağlı

    $anahtar_index = 0;  // Anahtar kelimesi üzerinde gezinme indeks

    for ($i = 0; $i < strlen($sifreli_metin); $i++) {
        $karakter = $sifreli_metin[$i];
        
        // Eğer harfse çöz
        if (ctype_alpha($karakter)) {
            $anahtar_harf = $anahtar[$anahtar_index % strlen($anahtar)];
            $anahtar_deger = ord($anahtar_harf) - ord('A');
            $karakter_deger = ord($karakter) - ord('A');
            
            // Vigenère şifre çözme (geri kaydırma işlemi)
            $cozulmus_karakter = chr(($karakter_deger - $anahtar_deger + 26) % 26 + ord('A'));
            $cozulmus_metin .= $cozulmus_karakter;

            // Anahtar kelimesi üzerinde ilerle
            $anahtar_index++;
        } else {
            // Harf dışı karakterler olduğu gibi eklenir
            $cozulmus_metin .= $karakter;
        }
    }
    
    return $cozulmus_metin;
}

// Kullanıcıdan verileri al
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $metin = $_POST['metin'];
    $anahtar = $_POST['anahtar'];

    // Şifreleme ve çözme
    $sifreli_metin = vigenere_sifrele($metin, $anahtar);
    $cozulen_metin = vigenere_coz($sifreli_metin, $anahtar);
}

?>

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vigenère Şifrelemesi</title>
</head>
<body>

<h2>Vigenère Şifreleme ve Şifre Çözme</h2>

<form method="post">
    <label for="metin">Metni Girin:</label><br>
    <input type="text" id="metin" name="metin" required><br><br>

    <label for="anahtar">Anahtar Kelime:</label><br>
    <input type="text" id="anahtar" name="anahtar" required><br><br>

    <input type="submit" value="Şifrele">
</form>

<?php
if (isset($sifreli_metin)) {
    echo "<h3>Şifreli Metin: $sifreli_metin</h3>";
    echo "<h3>Çözülen Metin: $cozulen_metin</h3>";
}
?>

</body>
</html>
PHP Kodunun Açıklaması:
  1. Sezar Şifreleme Fonksiyonu (sezar_sifrele): Bu fonksiyon, her harfi kaydırarak şifreleme işlemi yapar. Harflerin küçük veya büyük olmasına göre ASCII değerlerini kullanarak kaydırma yapar. Harf olmayan karakterler (boşluk, noktalama işaretleri vb.) olduğu gibi bırakılır.
  2. Şifre Çözme Fonksiyonu (sezar_coz): Şifreli metni çözmek için, aynı kaydırma değeri ile şifre çözme işlemi yapılır. Bu, şifreleme fonksiyonunun tersine çalışır.
  3. HTML Formu: Kullanıcıdan şifrelemek istediği metni ve kaydırma miktarını alır. Kullanıcı formu gönderdikten sonra PHP kodu çalışır ve şifreli metin ile çözülen metin ekrana yazdırılır.
Sezar Şifrelemesi Nasıl Çalışır?

Örneğin, kullanıcı “Merhaba” metnini ve kaydırma değeri olarak 3 seçerse, şifreli metin şu şekilde olacaktır:

  • Girdi: Merhaba
  • Şifrelenmiş: Phukded

Kullanıcı şifreli metni tekrar çözüme almak isterse, aynı kaydırma değeri ile şifre çözme işlemi yapılır:

  • Çözülen Metin: Merhaba

Bu şekilde Sezar şifrelemesi hem güvenli olmayan, ama eğitim ve uygulama amacıyla oldukça yararlı bir şifreleme yöntemidir.

Sonuç

PHP ile Sezar şifrelemesi yapmak oldukça basit ve etkili bir yöntemdir. Bu yazıda, Sezar şifrelemesinin nasıl çalıştığını, PHP ile nasıl kodlanacağını ve şifre çözme işlemini nasıl yapabileceğimizi öğrendik. Bu tür basit şifreleme yöntemleri, temel kriptografi prensiplerini öğrenmek için harika bir başlangıçtır.

Eğer daha ileri seviyede şifreleme ve güvenlik önlemleri arıyorsanız, modern şifreleme algoritmalarına (örneğin AES veya RSA) geçmeyi düşünebilirsiniz.

Kodun çalışır hali : https://files.utkukahraman.dev/isu/2/bahar/kriptografi/sezar/ 

Kategori:HTMLPHPYazılım Dilleri

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir