PHP ile kullanılan şifreleme yöntemleri

17 Ocak 2013 Perşembe, 01:42 sularında İzni Burak Demirtaş tarafından #php konularında yazılmış.
Yazıldığından bu yana, 12798 kez okunmuş ve 2 yorum almış.

Aslında burada şifrelemeden kastım "hash"leme işlemi. Genel anlamda bu gibi durumların "şifreleme" gibi düşünülmesinden dolayı bu şekilde yazdım. Bende ilk zamanlar böyle düşünüyordum ve bu yazının içeriğini de aslında farklı yazmıştım ama; zaman geçtikçe ve araştırmalar yaptıkça bunun böyle olmadığını gördüm :) Bir çok eleştiri de aldım bu konuyla ilgili ama, kim yeni başladığını şeylerde hatalar yapmıyor ki? :) 

Neyse çok uzatmayayım. Özetleyecek olursak, aşağıda işinize yarayabilecek en popüler hashleme ve kodlama tekniklerinden örnekler vereceğim. Zaten genel bir araştırma yapınca bu konular için karşınıza çıkacak muhtemel sonuçlar; MD5, SHA1, BASE64 vs gibi konular olacak. PHP'de bunlar nasıl kullanılıyormuş, ne gibi bir şey elimize geçiyormuş, alternatif olarak neler yapabiliriz bir göz atalım.

MD5

MD5 algoritması ile hashleme sonucunda 16'lık bir karakter dizgesinden 32 karakterlik bir değer elde edilir. MD5 metodu ile hashlenen bir değerin, geriye dönüşü olmaz. Yani bu fonksiyon ile hashlenen bir dizgeyi tekrar eski haline dönüştüremezsiniz. MD5 her ne kadar geri dönüştürülemediği için güvenli gibi gözükse de, güvenliğimiz için kolay verileri hashlemekten kaçınırsak iyi ederiz. Veya hashlenecek veriye ek olarak sadece bizim bildiğimiz bir ifade ekleyip (salt) hashleme işlemini biraz daha zor bir hale getirebiliriz. Şimdi MD5 ile hashlenmiş bir veriye bakalım:

<?php
 $x = 123456;
 echo md5($x); // çıktısı: e10adc3949ba59abbe56e057f20f883e

md5'i detaylı inceleyin


SHA1

SHA1 algoritması da 16'lık bir karakter dizgesinden 40 karakterlik bir değer elde eder. MD5 için verdiğim önerileri, burada da dikkate alabilirsiniz. Yukardaki örneği bir de sha1 ile hashleyelim:

<?php
 $x = 123456;
 echo sha1($x); // çıktısı: 7c4a8d09ca3762af61e59520943dc26494f8941b

sha1'i detaylı inceleyin

BASE64

BASE64 bir kodlama tekniği, bir encoding algoritması olarak söylenebilir ve diğer metotların aksine geri dönüştürülebilir. Yani encode ettiğiniz bir veriyi, tekrar eski haline getirebilirsiniz. BASE64 ile encode ettiğiniz veri, orjinal içeriğe göre %30 daha fazla yer kaplar. (Bunu bir yerde okumuştum ama, şu an kaynak veremiyorum. Yanlış bilgiyse beni de bilgilendirin lütfen.) PHP'de bu encoding metodunu kullanmak için base64_encode, geri dönüştürmek için ise base64_decode fonksiyonlarını kullanacağız.

<?php
 $x = 123456;
 $encode_veri = base64_encode($x); // çıktısı: MTIzNDU2
 $orjinal_veri = base64_decode($encode_veri); // çıktısı: 123456
 echo 'Encode edilen veri:'.$sifreli_veri.'<br />';
 echo 'Orjinal veri:'.$orjinal_veri;

base64'ü detaylı inceleyin

Bunlara ek olarak;

Daha karışık ve olabildiğince benzersiz hashler elde etmek için yukarıda örneklerini görmüş olduğumuz metotları birden fazla veya 2-3 farklı metodu bir arada kullanabilirsiniz. Örneğin verinizi önce sha1, sonra md5 ile hashleyebilirsiniz. Bunun yanı sıra yukarda da belirttiğim gibi; verinizin başına veya sonuna sadece sizin tarafınızdan bilenecek bir ek veri (salt) ekleyebilirsiniz ve bu şekilde hashleme yapabilirsiniz. Böylece bulunması daha zor bir hash elde etmiş olursunuz. 

Bunun yanı sıra, PHP'de bulunan password_hash, hash_hmac ve diğer hash_* metotlarını da kesinlikle incelemenizi ve kullanmanızı öneririm. Yukarıdaki metotlar her ne kadar daha çok bilinen ve basit anlamda tercih edilen yöntemler olsa da, bahsettiğim metotlar ile daha karmaşık hashler üretmeniz mümkün. Ayrıca yine yukarıda bahsettiğim verinize ek bir salt ekleme işlemini, bu metotlarda varsayılan olarak bulabilir ve kullanabilirsiniz. 

Umuyorum ki faydası olan bir yazı olmuştur. Soru veya görüşlerinizi yorum kısmından yazabilirsiniz.

Sağlıcakla kalın. :)


Yorumunu Gönder     Sende görüşünü yaz!

2 adet yorum yapılmış.   Sende yap!

Serkan Şahin demiş ki; 9 Şubat 2017 Perşembe, 10:59
$parola = md5($_POST['parola']); kullanmak yerine
$parola = md5(sha1(sha1(md5($_POST['parola'])))); kullanırsanız kırılması çok daha zorlaşacaktır.
İzni Burak Demirtaş demiş ki; 23 Şubat 2017 Perşembe, 18:16
@Serkan; yazı 4-5 sene önceki bir yazı olduğu için biraz eski yöntemleri içeriyor ve sadece fikir vermek amaçlı. Tabiki farklı şeyler kullanılarak güçlendirilebilir. Daha güncel olarak; password_hash, hash_hmac ve diğer hash_* fonksiyonları kullanabilirsiniz.

Yine aylar olmuş ve buralarda gözükmüyorum. Ne zaman "buralara daha çok vakit ayıracağım, bol bol yazacağım" desem, kesin başka bir şeyler çıkıyor; işler, güçler, yoğunluklar vs, odaklanamıyorum. Öyle ya da böyle bunu bir düzene oturtacağım. inatçıyım bu konuda....

8 Temmuz 2018, 04:55   —   #genel   —   Yorum yok.   —   Devamını Oku »

Buraları yine oldukça aksatmış olmanın verdiği iç rahatsızlığı ile, geçen haftadan beri bir şeyler karalamaya olan isteğim ancak şu an vuku buluyor. Geçen hafta oldukça yoğun ve hareketli geçtiği için yazmaya vakit bulamadım aslında. Ya da ne bileyim, belki de bahane buluyorum......

27 Şubat 2018, 11:34   —   #genel   —   2 yorum var.   —   Devamını Oku »

Gidelim buradan...

"Gidelim buradan... Göğsünü sıkan, içini daraltan o laneti geride bırakıp gidelim. Burada yağmur bile güzel yağmıyor artık. Yağmuru güzel yağan bir yerlere gidelim....

5 Ocak 2018, 04:57   —   #karalamaca   —   Yorum yok.   —   Devamını Oku »

$_2018 = new HappyYear();

Zamanın ne denli hızlı aktığını bilmiyorum ama, gerçekten "su gibi" akıp geçiyor deyimi doğru galiba. Ne ara 2018 geldi, kapımıza dayandı; hiç bir fikrim yok. Oysa ben daha tarih yazmak zorunda olduğum kağıtlara "2017" yazmaya bile alışmamıştım. Şimdi bir de 2018 çıktı başımıza. ...

31 Aralık 2017, 17:10   —   #genel   —   Yorum yok.   —   Devamını Oku »

İnsanın içindeki sıkıntıya bir isim, bir sebep bulamamasına hep şaşırmışımdır. Çok şaşırdığı ne varsa, bunları çok mu yaşıyor insanlar genelde hiç bilmiyorum. Ama bu en azından bende genelde böyle oluyor. Açık konuşayım mı? Birinin bir sözü vardı, ama kimindi hatırlamıyorum. Şöyle diyordu: "Kafamdan atamıyorum. Hep aklıma geliyor, hem de en tuhaf zamanlarda. Duştan çıkarken, sokakta yürürken, gece yatağıma yatarken; bilinçli olarak bir şey düşünmediğim zamanlarda."... Sanki hayat denen bu değişik alem içinde, bir yerlerde bu söz içerisinde bir yerlerde sıkışmış kalmış gibiyim. Nedenini bilmiyorum. Belki de biliyorum. Belki de bildiğimi bilmiyorum. Belki anlatamıyorum, belki anlatmak istemiyorum. Belki içimden atmak istiyorum. Belki de atamıyorum. Belki seviyorum, belki de yine seviyorum.. Bazen çok saçmalıyorum değil mi? Biliyorum. Sarhoş da değilim ama olmadığıma da beni kim ikna edebilir? Zaten sarhoşken de anlatamıyorum. Atamıyorum. Seviyorum. Neyse, belki de en iyisi uyumak.

11 Aralık 2017, 04:27   —   #karalamaca   —   3 yorum var.   —   Devamını Oku »

hello İstanbul!

Üniversite hayatını bitirdik. Aslında planım, elimdeki projeler ile ilgilenip bir yandan da sene sonuna kadar kafa dinlemekti. 2018 itibariyle iş-güç arayışlarına girişecek ve mutlu olabileceğim, bana bi'şeyler katabilecek, hem kendime hem onlara fayda sağlayacağım bir şirket bulmak için adımlar atacaktım. Tahmin edeceğiniz üzere planlar yine tutmadı....

6 Ekim 2017, 10:02   —   #karalamaca   —   Yorum yok.   —   Devamını Oku »

Eylül'dü. 
Dalından kopan yaprakların, 
Sararan yanlarına yazdım adını. 
Sahte bir gülüşten ibarettin oysa. 
Ve hiç bilmedin ellerimin soğuğunu. ...

16 Eylül 2017, 17:13   —   #karalamaca   —   Yorum yok.   —   Devamını Oku »
daha fazla göster