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, 20600 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.

laravel: concurrent request

In Laravel, you can make concurrent request by using pool method of the HTTP Client of the Laravel....

23 Nisan 2022 — #php #hap bilgi Yorum yok. Devamı »

laravel: extend any service from container

Laravel has a very powerful and useful Service Container and you can extend any service from the Laravel Container any time. For that, you can use the extend() method to decorate or configure the resolve services from the container. ...

17 Nisan 2022 — #php #hap bilgi Yorum yok. Devamı »

laravel: using eager loading with models

We use models a lot when developing projects with Laravel. By defining the relationships between the tables within the models, we ensure that the relevant data is brought over the database in a practical way. We can take advantage of the Eager Loading feature to increase performance and get faster results when performing operations with related models. For this, we can use the with() method when creating a query from the related models:
...

14 Nisan 2022 — #php #hap bilgi Yorum yok. Devamı »

laravel: faker ile resim oluşturmak

Bildiğiniz gibi Laravel ile geliştirme yaparken modellerimize uygun şekilde fake veriler oluşturmak için Faker kütüphanesi ile fazlaca haşır neşir oluyoruz. Genellikle text veriler oluştursak da, Faker kütüphanesinin resim oluşturmak gibi yetenekleri de var:...

13 Nisan 2022 — #php #hap bilgi Yorum yok. Devamı »

Laravel'de zamanlanmış görev (scheduled task) tanımlarken, çalışan komutun tamamlanıp tamamlanmadığını anlamak ve buna göre başka işlemler yapmak istiyorsanız şu şekilde bir yapı kullanabilirsiniz:

12 Nisan 2022 — #php #hap bilgi Yorum yok. Devamı »

PHP 8.1 - yeniliklere hızlı bakış

PHP 8.1, 25 Kasım 2021 tarihinde yayınlandı. Bu sürümde hayatımıza neler girdi, ne gibi değişiklikler yapıldı birlikte inceleyelim mi?...

13 Aralık 2021 — #php Yorum yok. Devamı »

PHP 8'e Hızlı Bakış

Merhabalar. PHP 8 ile birlikte hayatımıza neler gelecek, neler değişecek birlikte göz atmaya var mısınız? Haydi başlayalım o zaman…
...

15 Haziran 2020 — #php Yorum yok. Devamı »

Selamlar. Ramazan ayının ve sahuru beklemek bahanesiyle gece geç saatlere kadar takılmanın vermiş olduğu yetkiye dayanarak yine bazı projeler üzerine çalışıyor, bazı araştırmalar yapıyor ve müzik dinliyordum. Ve birden "uzun zamandır bir şeyler karalamıyorum ben ya" diye bir düşünce geçti beynimin derinliklerinden. Hemen buraya geldim....

11 Mayıs 2020 — #genel Yorum yok. Devamı »

React Hooks: useState - useLayoutState

React’in 16.8 versiyonu ile birlikte hayatımıza Hook kavramı girdi. Artık çok daha az kod ile daha efektif React Componentleri yazabiliyoruz. Hooks konusu ile ilgili detaylı bilgiyi React’in kendi dokümantasyonundan okuyabilir, bilgi sahibi olabilirsiniz....

18 Şubat 2020 — #web 1 yorum var. Devamı »

PHP 7.4'e Hızlı Bakış

PHP 7.4 ile birlikte hayatımıza girecek olan özelliklere şöyle hızlıca bir bakış atmaya ne dersiniz?
...

5 Eylül 2019 — #php Yorum yok. Devamı »

React ile High Order Component (HOC) kullanımı

React ile High Order Component kavramını sizlere anlatmaya çalışacağım....

17 Ağustos 2019 — #web Yorum yok. Devamı »

Selamlar, oldukça uzun bir zaman sonra tekrar buralardayım. Dolu dolu geldim ama; biraz oturun, konuşalım....

16 Şubat 2019 — #genel Yorum yok. Devamı »

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 — #genel Yorum yok. Devamı »

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 — #genel 2 yorum var. Devamı »

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 — #karalamaca Yorum yok. Devamı »

$_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 — #genel Yorum yok. Devamı »
daha fazla göster