Kriptolama ve Kırılamayacak Şifre Yapımı

 bcakir
 19 Temmuz 2011
 Php

Merhaba arkadaşlar bu makalede şifreleme olayını, güvenli bir şifrenin neler içermesi gerektiği ve kolay kolay kırılamayan şifreleme metodu nasıl olmalı konularını değineceim. Bunun yanında şifrelemenin mantığını kavramak için bir tane basit şifreleme fonksiyonu yazacağız. Ayrıca günümüzde popüler olarak kullandığımız md5 ve Sha1 şifreleme (hash) yöntemlerini de kullanarak örnekler yapacağız. Bu konuları elimden geldiğince temel düzeye indirerek kolayca anlamanızı sağlayacağım.

Şifreleme, bilgilerimizin başkaları tarafından anlaşılmaması için kullanılan yöntemdir. Bu yöntem özellikle matematikçilerin kriptoloji bilimi altında yaptığı çalışmalarla geliştirilmektedir. Günümüzde özellikle bankalar olmak üzere neredeyse her yerde kullanılmaktadır. Örneğin, bir siteye üye olurken girdiğimiz kullanıcı şifremiz başkalarının anlamaması için şifrelenerek kaydedilmektedir. Kısaca şifreleme olayından bahsettikten sonra güvenli şifre nasıl olmalıyı ele alalım.

Güvenli şifre;

  • en az 1 tane küçük harf içermeli
  • en az 1 tane büyük harf içermeli
  • en az 1 tane rakam içermeli
  • en az 1 tane özel karakter içermeli, (@,!,?,^,+,$,#,&,/,{,*,-,],=, gibi)
  • ve en az 7 karakterden

oluşmalıdır. Örneğin; Ek*tft5 veya aKR/3se gibi. Kırılması zor şifre yapmayı yazımın daha ilerisinde, günümüzde kullanılan popüler şifreleme yöntemleri içinde anlatacağım. Şimdi basit bir şifreleme fonksiyonu oluşturalım. Bu fonksiyonda her harf kendinden gelen bir sonraki harf ile şifrelenecek. Yani a harfi b ile, m harfi n ile gibi.

<?php
echo sifreleme("bcakir");

function sifreleme($gelen) {
   $harfler = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
   $degistirilen = 'bcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZa';
   $sifrelenmis = strtr($gelen, $harfler, $degistirilen);
   return $sifrelenmis;
}
?>

Fonksiyonumuzda harflerimizi girdik. Bunları değiştireceklerimizle eşleştirdik. Daha sonrada değiştirme işlemimizi yaptık ve fonksiyondan dışarı döndürdük. Bu betiğe isterseniz $harfler ve $değiştirilen değişkenlerin içeriğini değiştirerek başta girilen yazıyı tekrar eski haline döndürme fonksiyonunu da ekleyebilirsiniz. Şimdi de popüler şifreleme metodlarından bahsedelim biraz. md5 ve Sha1 günümüzde en popüler olanlarıdır. Ama artık md5 şifreleme metoduna güvenilmemektedir. Çünkü geriye dönüştürme kolayca yapılabilmektedir. Bu yüzden Sha1 metodunu tercih etmenizi öneririm. Fakat bu metodun da kırılmayacağının garantisi yoktur. Bu yüzden kolay kolay şifrelerim kırılmasın istiyorsanız bu metodları üst üste en az 2 defa kullanın. Örneğin, bir veriyi iki kez Sha1 ile şifreleyin ya da ilk önce md5 ile şifreleyin daha sonra şifrelenmiş verinizi birde Sha1 ile şifreleyin. Daha da güvenli bir şifreleme yöntemi oluşturmak istiyorsanız; bu metodları kullanmadan önce sabit bir kelimeyi şifrelenecek verinin sonuna ekleyin ve ondan sonra md5 veya Sha1 metodunu kullanın.

<?php
echo Sha1("bcakir");
//ekran çıktısı 43d7f34473a07bfa379de4299b2c6165249b3149

echo md5("bcakir");
//ekran çıktısı 76003724d1e75eeb540fe46d2f4811c7

echo Sha1(md5("bcakir"));
//ekran çıktısı 04239072f080d54573b6faccd8dd55ee8817d422

$sabit=".com";
echo Sha1(md5("bcakir".$sabit));
//ekran çıktısı ee601c7205f72befbfc3e853c1a4fcb959493aaa
?>

Özellikle web sitesi geliştiricisiyseniz bu bilginin işinize çok fazla yarayacağını düşünüyorum. Bu metodları kullanmak dışında isterseniz kendinize göre şifreleme metodu da oluşturabilirsiniz. Bütün konuları açıklayarak yazımızı tamamlamış olduk. Bugünlük benden bu kadar. İki tane sınavımdan dolayı bir hafta kadar yazamayacağım büyük bir ihtimalle. Diğer yazılarımda görüşmek dileğiyle.

 2.826 Okunma

Bu yazıya 10 yorum yapılmış.

  1. Mükemmelsin, tek kelimeyle mükemmel paylaşımlar yapıyorsun. Tebrik ediyorum seni.

    • Teşekkür ederim, umarım faydalı oluyordur.

      • Ben daha gelişmiş bir anlatım istiyorum baştan sonra belli bir matematiksel işleme dayalı bir kriptolama.

        • Sha1, md5 gibi bir hash algoritması, çok yüksek matematik bilgisi gerektirir. Bu sadece yazılımcıların (bilgisayar mühendisleri) altından kalkabileceği bir konu değildir (matematik profesörleri gerekir). Benim bu yazımda asıl anlatmak istediğim güvenli şifre saklama yöntemiydi, fakat zamanında bu kadar bilgim olmadığı için biraz sınırları kaçırmışım. Benim bu konuda genel olarak söyleyebileceğim: en tercih edilen ve güvenli şifre saklama yöntemi; her kişi için 15-20 karakter arasında (karakter sayısı sabit olmaması daha tercih edilenidir) kişiye özel (yani başka bir kişide aynı tuzlama hecesi olmayan) bir tuzlama (salt) hecesi oluşturmak ve bununla birlikte kişinin girdiği parolayı birkaç kere md5 ve Sha1 hash algoritmasına sokup sonucunu veritabanına kaydetmektir. Diyecekseniz biz herkese farklı bir hash parolası (tuz + kişinin yazdığı parola) oluşturduk nasıl login yapacağız? Tuz hecesini kişi id ile ayrı bir tabloda saklayıp, kişinin girdiği parolası + tuz hecesini hash algoritmasına sokup veritabanından hash sonucunu karşılaştıracaksınız.

  2. ben böyle site görmedim 🙂 bayaa emek verilen kodlamaları paylaşmak istemiyor çoğu kişi. ama bu site sayesinde çok şey öğreniyoruz. Süpersin …

    • Yorumunuz için teşekkür ederim. Yararlı olabiliyorsam ne mutlu bana. Ben yazmaktan keyif alıyorum. Hem sizlere yardımcı oluyorum hem de kendime. Araştırarak yeni bilgiler öğreniyorum ve unutmamak için de yazmayı tercih ediyorum. Ben herhangi bir zararını görmedim daha 🙂

  3. meraba ben bir kriptografi uzmanı olmak istiyorum bunu için hangi bölümü okumalıyım

    • Kripto uzmanı olmak için matematik ile ilgili bölümler okumak gerekir. Çünkü her şifrelemenin altında bir matematik teorisi yatmaktadır. Matematik bölümü ya da matematik mühendisliği okuduktan sonra yeterli başarıyı gösterirsen yüksek lisans ya da doktora programı olarak kriptografi bölümüne gidebilirsin.

  4. Merhaba, benim merak ettiğim konu peki md5’in anlamını bilen var mı aranızda, hangi manıtğa göre yani yazdığımız ne gibi işlemlerden geçiyor bunu bilen varsa çözme yolunuda buluruz 😀 Ayrıca ben kriptolar yazıyorum kendi kendime kednim değişik ve özel mantıklar kullanıyorum, uyduruyorum ve bunu php deki sha1, md5, base64_encode, crc32 fonksiyonlarıyla karıştırıyorum. Güzel şeyler çıkıyor. 😉 Ama critolama yaparken mantıklada sözer şeyler kullanıyorum bazen yani oluşturuken sorun yok ama. Bunu md5 gibi bir fonksiyon olmasını istiyorsak Bcakir’in dediği gibi yüksek matematik seviyesine ulaşmak gereklidir. Bir de biz php için fonksiyon yazıp php ye eklettirebiliyor muyuz ben yapılıyor diye biliyordum ama yapmasını bilen varmı yapınca nasıl göndereceğiz yani?
    Bu arada çoook teşşekkürler php de bu site bana her konuda yardımcı oldu.

    • Kendin şifreleme algoritmaları yapabilirsin ama bunlar md5 ve Sha1 hash algoritmalarının güvenlik konusunda, yayından bile geçemez. Çünkü yüzlerce matematik mühendisi çalışıyor bunların geliştirilmesi için. Php core’a katkı sağlayabilir kendi metodlarını ekletebilirsin bu mümkün (iyi derecede yazılım yapabilirsen) fakat bunun kriptolama konusunda olması neredeyse mümkün değil, yukarıda söylediğim nedenden ötürü.

Yazı hakkında görüşlerinizi belirtmek istermisiniz?

Daha fazla Php
Kapat