PHP ile Hibrid Kriptolama Sistemi

Bir önceki Simetrik, Asimetrik ve Hibrid Kripto Algoritmaları başlıklı yazımızda simetrik ve asimetrik kripto algoritmalarından ayrıntılı bir şekilde bahsetmiş ve bu algoritmaların kullanılması için oluşan sorunları hibrid kripto algoritması ile minimuma nasıl indirebileceğimizi anlatmıştık. Bu yazımızda bu algoritmaları kullanarak PHP ile kripto sistemi geliştirmeyi anlatacağız. Aşağıda anlatacaklarımızı anlamak için yukarıda bashettiğimiz önceki yazımızı okumanızı tavsiye ederim.

PHP ile kripto sistemi geliştirmek için PHP Secure Communications Library yani phpseclib kütüphanesini kullanacağız. phpseclib kütüphanesi açık kaynak kodlu olup RSA, DES, 3DES, RC4, Rijndael, AES, SSH-1, SSH-2 ve SFTP sistemlerini desteklemektedir.

phpseclib kütüphnaesi bize open_ssl ve mcrypt gibi daha hızlı şifreleme fonksiyonları sağlar. Eğer bu fonksiyonlar sistemde kullanılabilirse performans açısından çok büyük fayda sağlar. Paylaşlımlı hosting gibi sistemlerde bazen kullanılabilir olmuyor.

Bu kütüphaneyi sisteminize kurmak için bu bağlantıyı, dökümantasyona ulaşmak için ise bu bağlantıyı kullanabilirsiniz. Eğer kütüphaneyi sisteminize kurduysanız örnek kodlara geçebiliriz.

Genel ve Özel Anahtarların Oluşturulması

RSA classı anahtar oluşturma metodunu içermektedir. Alttaki örnekte nasıl anahtar çifti oluşturabileceğimizi ve kaydedeceğimizi görebilirsiniz. Private key yani özel anahtar dekripto işlemine kadar güvenli bir yerde tutulmalıdır. Public key yani genel anahtar mesajı göndericiye gönderilmelidir.

$rsa = new Crypt_RSA();
$keys = $rsa->createKey(2048);
file_put_contents('key.pri',$keys['privatekey']);
file_put_contents('key.pub',$keys['publickey']);

Şifreleme Fonksiyonu

Şifreleme fonksiyonu olan encrpt_message fonksiyonu üç parametre alır.

  1. $plaintext – Şifrelenecek mesaj
  2. $asym_key – Gönderici tarafından oluşturulan public key.
  3. $key_length – İsteğe bağlı uzunluktaki anahtar. 240’tan az olmalıdır.
function encrypt_message($plaintext,$asym_key,$key_length=150)
{
          
     $rsa = new Crypt_RSA();
     $rij = new Crypt_Rijndael();
 
    
    // Rastgele simetrik anahtar oluştur
    $sym_key = crypt_random_string($key_length);
    
    // Simetrik anahtar ile mesajı şifrele               
    $rij->setKey($sym_key);
    $ciphertext = $rij->encrypt($plaintext);
    $ciphertext = base64_encode($ciphertext);
    
    // Simetrik anahtarı asimetrik olarak şifrele            
    $rsa->loadKey($asym_key);
    $sym_key = $rsa->encrypt($sym_key);
    
    // İletmek için simetrik anahtarı base64 ile şifrele
    $sym_key = base64_encode($sym_key);
    $len = strlen($sym_key); // Uzunluğunu bul
    
    $len = dechex($len); // Mesajın ilk 3 byteının uzunluğu anahtarın uzunluğu
    $len = str_pad($len,3,'0',STR_PAD_LEFT); // Emin olmak için kontrol
    
    // Uzunluğu, şifrelenmiş simetrik anahtarı ve mesajı birleştirme
    $message = $len.$sym_key.$ciphertext;
     return $message;
}

Şifre Çözme Fonksiyonu

Şifre çözme fonksiyonu olan decrypt_message iki parametre alır.

  1. $message – Dekriptolanacak mesaj.
  2. $asym_key – Alıcının private keyi yani özel anahtarı.
function decrypt_message($message,$asym_key)
{
     
    $rsa = new Crypt_RSA();
    $rij = new Crypt_Rijndael();
    // Simetrik anahtarı ayır
    $len = substr($message,0,3);
    $len = hexdec($len);                       
    $sym_key = substr($message,0,$len);
    
    // Şifreli mesajı ayır
    $message = substr($message,3);
    $ciphertext = substr($message,$len);
    $ciphertext = base64_decode($ciphertext);
    
    // Şifreli simetrik anahtarı çöz
    $rsa->loadKey($asym_key);
    $sym_key = base64_decode($sym_key);
    $sym_key = $rsa->decrypt($sym_key);
   
    // Mesajı çöz
    $rij->setKey($sym_key);                      
    $plaintext = $rij->decrypt($ciphertext);
                                                    
    return $plaintext;
}

Özet

PHP ile Hibrid Kripto SistemiYazılımlar ve sistemler gün geçtikçe birbiriyle bağlantılı hale geliyor. Bununla birlikte verilerin güvenli bir şekilde iletilmesi büyük önem arz ediyor. Asimetrik anahtarlar güvenle iletilmeye başlandığından beri kullanım oranı gittikçe artıyor. Ama asimetrik anahtarların taşıyabileceği mesaj boyutu sınırlı. Önceki ve bu yazımızda anlattığımız hibrid kripto sistemi ile bu sorunun önüne geçmiş olduk. Kullandığımız phpseclib kütüphanesi bize bu uygulamayı PHP sistemlerde yapmamıza olanak sağlıyor. Kısaca PHP ile kriptolama sistemi oluşturmuş oluyoruz.

Bir önceki yazımız olan PHP ile Domain Whois başlıklı makalemizde Domain, PHP ile Whois ve Whois hakkında bilgiler verilmektedir.

About This Author

Uzun yıllardır yazılım ile uğraşıyorum. PHP ile başladığım yazılım hayatıma şu an PHP'nin yanında Swift ve Python ile devam ediyorum. Bu güne kadar bir çok proje geliştirdim ve yeni projeler geliştirmeye de devam ediyorum. Bu sitede yazılımseverlere faydalı bilgiler vermeye, yazılım geliştirmeye, öğrendiklerimi paylaşmaya, yeni başlayanlara yol göstermeye ve onlara yardımcı olmaya çalışıyorum.

1 Comment

You can post comments in this post.


  • Teşekkürler.
    Yararlı bir paylaşım olmuş.

    Servet Sarıca 8 ay ago Reply


Post A Reply