PHP

Php’de şifreleme yöntemleri

Arkadaşlar bu yazıda php’de şifreleme yöntemlerine ele alacağız. Özellikle işin içine güvenliğe dair herhangi bir konu girince önemi tahmin edeceğiniz üzere artmaktadır. Yaptığımız çalışmalarda, oluşturduğumuz projelerimizde ve daha bir çok yerde güvenliğe önem verilmelidir. Güvenliğin göz ardı edildiği çalışmalarımız birçok kötü senaryoya zemin hazırlar.

Yaptığımız çalışmalarımızda yada projelerimizde güvenliği ilgi alanında olan örneğin parolalarda herhangi bir filtre süzgecinden geçirmeden veya şifreleme algoritmalarından geçirmeden kodlama işlemini geçirdiğimizde dışarıdan gelen bir sızma veya saldırı sonucu istenmeyen durumlar gerçekleşebilir. Bu durum hem bizi hem de yaptığımız çalışmayı kullanacak kişileri olumsuz etkiler. Güvenlik noktasında bu gibi istenmeyen durumlarla karşı karşıya kalmamak adına şifreleme yöntemlerine başvurmalıyız.

Şimdi sırasıyla bu şifreleme yöntemlerini ele alacağız. Öncelik olarak isterseniz Md5() fonksiyonu ile başlayalım.

MD5

Kriptografide Md5, 128-bit yığın düğüm değeri ile geniş çaplı olarak kullanılan bir kriptografik düğüm fonksiyonudur. Md5 algoritması ile şifreleme sonucunda 32 haneli onaltılık bir sayı dizgesi döndürürüz. Bir internet standartı olarak Md5 bir çok güvenlik uygulamasında kullanılmaktadır.  Üyelik sistemlerinde parolaları şifrelemek için de kullanır. WordPress , PhpNuke ve Phpbb gibi sistemlerin şifreleri Md5 ile şifrelenerek korunmaktadır.

Md5 genellikle veri güvenliğinin kontrolünde kullanılır. Yani Md5 öncelikle bir verinin doğru transfer edilip, edilmediği ve değiştirilip, değiştirilmediğini kontrol için kullanılır.

Md5 şifreleme metodu ile şifrelenmiş bir parola kırılabilme ihtimali vardır. Bu kırılmaya sebebiyet veren durum ise parolanın yeterince uzun olmamasından ve basit şifre oluşturumundan kaynaklıdır. Fakat şifremizi belirlerken rakamları, küçük-büyük harf kullanımını ve özel karakterleri dahil edersek bu şifrenin kırılması oldukça zor olacaktır. Aşağıda Md5 metodunun kullanıma bakalım.

<?php

if(isset($_GET['md5me'])) {

    $md5ed = md5($_GET['md5me']);
}
?>

<p>MD5 Değeri: <strong><?php echo $md5ed;?></strong></p>

<form action="#" method="get">
    <label for="md5me">MD5'de şifrelenecek değer:</label>
    <input name="md5me" id="md5me" type="text" />
    <input type="submit" value="Şifrele" />
</form>

pic1

SHA1

Ulusal Güvenlik Ajansı (NSA) tarafından tasarlanan ve Secure Hashing Algorithm olarak adlandırılan bu metod diğer Sha algoritmaları içerisinde en yaygın olarak kullanılanıdır. Sha1 algoritması ile sadece şifreleme işlemi yapılmaktadır, şifre çözümleme işlemi yapılamaz. Md5 ve Sha1 arasındaki en temel fark oluşturdukları özetlerdeki boyutsal farklılıktır. Sha1 algoritması şifreleme sonucunda 40 haneli onaltılık bir sayı dizgesi döndürürüz.

Sha1 algoritması, e-posta şifreleme uygulamaları, güvenli uzaktan erişim uygulamaları, özel bilgisayar ağları ve daha bir çok alanda kullanılabilir. Günümüzde güvenliği daha üst seviyelere çıkartılması anlamında Md5 algoritması ile birlikte ard arda kullanılara veriler daha güçlü bir şekilde şifrelenmektedir.

Aşağıda bulunan Sha1 şifreleme yöntemini inceleyelim.

<?php

if(isset($_GET['sha1me'])) {

    $sha1ed = sha1($_GET['sha1me']);
}
?>

<p>SHA1 Değeri: <strong><?php echo $sha1ed;?></strong></p>

<form action="#" method="get">
    <label for="sha1me">SHA1'de şifrelenecek değer:</label>
    <input name="sha1me" id="sha1me" type="text" />
    <input type="submit" value="Şifrele" />
</form>

pic2

CRC32

Crc32 algoritması ile şifrelenen değerler Md5 algoritmasında olduğu gibi çözülmesi mümkün değildir. Bu algoritma bize şifrelenmesini istediğimiz değeri tam sayı olarak şifreleme işlemi yapar. Bu tam sayı değere göre pozitif veya negatif olmaktadır. Crc32 metodu Md5 ve Sha1 metodları gibi geri dönüşü yoktur.

Crc32 metoduna nasıl bir şekilde şifrelendiğine bir örnek ile bakalım.

<?php

if(isset($_GET['crc32me'])) {

    $crc32ed = crc32($_GET['crc32me']);
}
?>

<p>CRC32 Değeri: <strong><?php echo $crc32ed;?></strong></p>

<form action="#" method="get">
    <label for="crc32me">CRC32'de şifrelenecek değer:</label>
    <input name="crc32me" id="crc32me" type="text" />
    <input type="submit" value="Şifrele" />
</form>

pic3

CRYPT

Crypt metodu hemen hemen Md5 metoduyla benzerlik gösteren bir şifreleme yöntemidir. Bu fonksiyonu, Md5 metodundan farkı olarak daha karmaşık bir veri şifreleme çıktısı elde etmektedir. Bundan dolayı bazı programcılar Crypt’nin daha karmaşık bir şifreleme yapısına sahip olmasından dolayı şifreleme olarak tercihlerini bu fonksiyondan yana kullanmaktadırlar.

Aşağıda verilen örneği inceleyiniz.

<?php

if(isset($_GET['crc32me'])) {

    $crc32gelen = crypt($_GET['crc32me']);
}

?>


<p>CRC32 Değeri: <strong><?php echo $crc32gelen;?></strong></p>

<form action="#" method="get">
    <label for="crc32me">CRC32'de şifrelenecek değer:</label>
    <input name="crc32me" id="crc32me" type="text" />
    <input type="submit" value="Şifrele" />
</form>

pic4

Verilerimizi nasıl daha güvenli hale getirebiliriz?

Arkadaşlar bu kısımda şifrelemek istediğimiz verilerin nasıl daha güvenli hale getirilmesini ele alacağız. Basit olarak verilerimizi yukarıda bahsedilen metodlar ile ard arda şifreleme yöntemini uygulayarak daha verimli bir şifreleme yöntemi yapmış olacağız. Hazırsanız birlikte inceleyelim.

<?php
if(isset($_GET['secret'])) {

    $sifreDüzeyiLevel1 = md5($_GET['secret']);    // 1f7c89756f71819535fcb907303df85f
    $sifreDüzeyiLevel2 = sha1($sifreDüzeyiLevel1);      // 87f156a7f6b77a09ac9aea61642eba13c33407f4
    $sifreDüzeyiLevel3 = crc32($sifreDüzeyiLevel2);     // 2043131373
    $secretPassword = 2043131373;


    if ($secretPassword == $sifreDüzeyiLevel3) {
        echo "<script
                  type='text/javascript'> 
                  alert('Girmiş olduğunuz parola doğrudur. Hoşgeldiniz. ');
               </script>";

    } else {
        echo "<script
                  type='text/javascript'> 
                  alert('Girmiş olduğunuz parola hatalı. Lütfen Tekrar Deneyiniz.');
              </script>";
    }
}
?>

<h5>Sisteme giriş yapmak için lütfen parolanızı giriniz:</h5>

<form action="#" method="get">
    <label for="secret">Şifre:</label>
    <input name="secret" id="secret" type="text" />
    <input type="submit" value="Şifrele" />
</form>

pictures

Arkadaşlar bu yazımda php’de şifreleme yöntemlerini konu aldık. Şifreleme mantıklarını ele aldık ve örneklerimiz ile şifreleme yapılarını gözlemledik. Sizlerde bunlar gibi kendi şifreleme yöntemlerinizi oluşturabilirsiniz. Kripto olayı geçmişten günümüze birçok yerde kullanılmıştır. İlerleyen zamanlarda kripto ile ilişkili halde olan  bazı yöntemlere ayrı bir yazıda yer vereceğim. Güvenli olması için şifrelerinizin uzun olması dileğiyle 😉 Esen kalın.



Yazar hakkında

Hakan Karataş

Back-End Developer @Webmaster.Kitchen.

Ağırlıklı olarak Back-end tarafında bilgi, birikim ve yeni öğrendiğim bilgiler ile mutfakta yer almaktayım. Görüş, düşünce ve tecrübelerinizi bizlerle paylaşabilirsiniz. Yorum alanı ile mutfağa katkıda bulunun.

Yorumlar

1 Yorum

Bir yorum yaz