AES Algoritması kullanarak ile Şifreleme ve Deşifreleme
Bu yazımızda şifreleme algoritmalarının en meşhurlarından AES (Advanced Encryption Standart) yani Türkçe adıyla Gelişmiş Şifreleme Algoritması olan ve yüzlerce algoritma arasından finale kalan iki Belçikalı bilim adamının geliştirdiği Rijndael algoritmasının PHP içinde kullanımını inceleyeceğiz.
Google'a AES yazıp algoritmanın nasıl çalıştığı hakkında matematiksel bilgiye sahip olabilirsiniz. Sanılanın aksine şifreleme algoritmalarının iç mekanizması açık olarak sunulur, şifrelemenin sonucu değiştiren kullanıcının belirlediği key(anahtar) 'dır.
AES bir secret key algoritmasıdır, şifreleme yaparken ve şifreyi çözerken aynı anahtar kullanılır. Anahtar gizli tutulmalıdır, güvenli şekilde saklanmalıdır. AES'in 128, 192 ve 256 bit olmak üzere üç versiyonu vardır. Şimdi gelelim PHP koduna, aşağıda belirlediğimiz bir key üzerinden şifreleme ve deşifreleme işlemini yapıyoruz.
Google'a AES yazıp algoritmanın nasıl çalıştığı hakkında matematiksel bilgiye sahip olabilirsiniz. Sanılanın aksine şifreleme algoritmalarının iç mekanizması açık olarak sunulur, şifrelemenin sonucu değiştiren kullanıcının belirlediği key(anahtar) 'dır.
AES bir secret key algoritmasıdır, şifreleme yaparken ve şifreyi çözerken aynı anahtar kullanılır. Anahtar gizli tutulmalıdır, güvenli şekilde saklanmalıdır. AES'in 128, 192 ve 256 bit olmak üzere üç versiyonu vardır. Şimdi gelelim PHP koduna, aşağıda belirlediğimiz bir key üzerinden şifreleme ve deşifreleme işlemini yapıyoruz.
<?php
# --- ŞİFRELEME ---
$anahtar = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
# AES-128, 192, 256 bit için sırasıyla anahtar boyutu 16, 24 veya 32 bayt
# olabilir.
$anahtar_boyutu = strlen($anahtar);
echo "Anahtar boyutu: " . $anahtar_boyutu . "<br>";
$metin = "Bugün İstanbulda hava çok güzel.";
# Rastgele CBC modunu kullanarak rastgele IV oluştur
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
# Şifreleme Algoritması AES (Rijndael block size = 128)
# güvenli olması için kodlanan giriş asla 00h ile bitmemelidir.
$sifreliMetin = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $anahtar,
$metin, MCRYPT_MODE_CBC, $iv);
# Önüne IV(başlagıç vektörü) ekliyoruz, deşifreleme yapabilmek için.
$sifreliMetin = $iv . $sifreliMetin;
#Şifreli metni string olarak göstermek için base64_encode fonksiyonundan geçiriyoruz.
$sifreliMetin_base64 = base64_encode($sifreliMetin);
echo $sifreliMetin_base64 . "<br>";
# --- DEŞİFRELEME ---
$sifreliMetin_dec = base64_decode($sifreliMetin_base64);
# IV'yi elde ediyoruz, iv_size mutlaka mcrypt_get_iv_size()ile oluşturulmalıdır.
$iv_dec = substr($sifreliMetin_dec, 0, $iv_size);
# Şifreli metni geri alma (önündeki $iv_size kaldırılıyor )
$sifreliMetin_dec = substr($sifreliMetin_dec, $iv_size);
#Deşifreleme fonksiyonunu çağırıyoruz
$metin = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $anahtar,
$sifreliMetin_dec, MCRYPT_MODE_CBC, $iv_dec);
echo $metin . "<br>";
?>
Mutlu kodlamalar,
Oğuzhan TAŞ
Haziran, 2016
KAYNAKLAR
1) Applied Cryptography, Bruce Schneier, Willey Press
2) Handbook of Applied Cryptography, CRC Press
http://cacr.uwaterloo.ca/hac/
3) http://php.net/manual/en/book.mcrypt.php
4) http://www.quadibloc.com/crypto/co040401.htm
Mutlu kodlamalar,
Oğuzhan TAŞ
Haziran, 2016
KAYNAKLAR
1) Applied Cryptography, Bruce Schneier, Willey Press
2) Handbook of Applied Cryptography, CRC Press
http://cacr.uwaterloo.ca/hac/
3) http://php.net/manual/en/book.mcrypt.php
4) http://www.quadibloc.com/crypto/co040401.htm
Dil Değiştir(Change Language)
Kategoriler
- Csharp(58)
- Csharp Formlar(23)
- Web Tasarım(9)
- CSS(27)
- JavaScript(37)
- PHP(50)
- Laravel(3)
- ASP.net(38)
- Excel(15)
- Güvenlik(4)
- E-Ticaret(3)
- Kariyer(5)
- SQL Server(29)
- MySQL(16)
- Linux(17)
- MacOSX(8)
- Ayarlar(12)
- Bilgisayar Ağları(3)
- Symfony(1)
- Teknoloji(7)
- VBS(1)
- Arduino(6)
- RaspberryPi(1)
- Algoritmalar(15)
- HTML(3)
- Python(2)
- Bash Script(7)
- C Programlama(10)
- Flutter - Dart(11)
- Bootstrap(1)
En çok Okunan 18 Makale
- :: Excelde EĞER Fonksiyonu Kullanımı...
- :: Csharp ile Access Veritabanı Bağlan...
- :: SQL nedir, Temel SQL Komutları nele...
- :: Hangi Linux Dağıtımı?
- :: OSX İşletim Sistemine PHP, MySQL, A...
- :: PHP dilini kullanarak MySQLi tekniğ...
- :: Excel Hesap tablosunda EĞERSAY Fonk...
- :: Excel Hesap tablosunda ÇOKETOPLA Fo...
- :: Excel Hesap tablosunda ETOPLA Fonks...
- :: Excel Hesap tablosunda ÇOKEĞERSAY F...
- :: Hangi Programlama Dilini Öğrenmeliy...
- :: Mac Bilgisayarınıza Windows 7 Yükle...
- :: PHP ile Basit Dosya Yükleme
- :: C# Programlama Dili ile İlgili Örne...
- :: PHP Dili kullanarak MySQLi Tekniği ...
- :: Excel hücrelerinde yıldız koyarak b...
- :: PhpMyAdmin Şifresi Nasıl Değiştiril...
- :: Hangisi acaba, PHP mi ASP.NET mi ?