1. Ana Sayfa
  2. PHP

PHP MD5 Şifreleme Kullanımı

PHP MD5 Şifreleme Kullanımı
PHP MD5 Şifreleme Kullanımı
+ - 0

Merhabalar, bu yazımda PHP MD5 Şifreleme Kullanımı konusundan bahsetmek istiyorum. Geliştirdiğim projelerin birinde tekrar çözülebilir şifreleme yöntemi gerekmişti ve bu yazıda anlatacağım kodları kullandım.

 

PHP MD5 Şifreleme

MD5 Şifreleme yöntemi, tekrar çözülebilir bir şifreleme metodudur. Ben bu yöntemi url parametrelerini kısaltmak amacı ile kullanmıştım. Bu konuda fazla detay veremeyeceğim. Bu şifreleme yönteminde size Tuzlama yöntemi ile kullanımını vereceğim. Şifreleme Tuzlama işlemlerini anlattığım konuya buradan bakabilirsiniz.

 

Şifreleme İşlemi

Şimdi şifreleme metodumu vereceğim.

    function safeEncrypt(string $message, string $key): string
    {
        if (mb_strlen($key, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) {
            throw new RangeException('Key is not the correct size (must be 32 bytes).');
        }
        $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

        $cipher = base64_encode(
            $nonce .
                sodium_crypto_secretbox(
                    $message,
                    $nonce,
                    $key
                )
        );
        sodium_memzero($message);
        sodium_memzero($key);
        return $cipher;
    }

Bu metodun parametrelerindeki message şifrelenecek veriyi veriyoruz. key parametresi ise tuzlama için kullanacağımız veridir. Bu metodu şifreleme yapacağınız yere ekleyebilirsiniz. Başka bir dosyaya yazıp include edebilirsiniz. Class içerisine yazıp class’ı çağırarak kullanabilirsiniz. Ben size sadece metodu vereceğim. Kullanım şekliniz size bağlıdır.

Burada dikkat etmemiz gereken konu tuzlama için kullanacağımız verinin her yerde aynı olması gerekiyor. Ben burada PHP Define kullandım. Aşağıda görebilirsiniz.

define("SODIUM_SECRED_KEY", "oooooooooooooooooooooooooooooooo");

Neden hepsi o diye sorarsanız. Bu key’in 32 karakter uzunluğunda olması gerekiyor. Bu key’in ne olacağı size bağlıdır. Kafanıza göre şeyler yazabilirsiniz. Ben burada defines diye bir dosya açıp, tüm sayfaların en başında include ederek kullanıyorum. Bu sayede tüm sitede aktif oluyor.

Şimdi şifrelemeyi nasıl kullandığımı göstereyim.

$key_md5 = safeEncrypt($message, SODIUM_SECRED_KEY);

Veri tabanına kaydedeceğiniz veya kullanacağınız çıktı $key_md5 değişkenidir.

 

Çözümleme İşlemi

Şimdi de çözümleme kodlarını vereceğim.

    function safeDecrypt(string $encrypted, string $key): string
    {
        $decoded = base64_decode($encrypted);
        $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
        $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');

        $plain = sodium_crypto_secretbox_open(
            $ciphertext,
            $nonce,
            $key
        );
        if (!is_string($plain)) {
            throw new Exception('Invalid MAC');
        }
        sodium_memzero($ciphertext);
        sodium_memzero($key);
        return $plain;
    }

Bu metottaki key parametresi de aynı şekilde Tuzlama için hazırladığınız key olmak zorundadır. Aksi takdirde çözümleme yapılamaz.

Şifreli datayı nasıl kullanacağınızı göstereyim.

 $result = safeDecrypt($message, SODIUM_SECRED_KEY);

Bu işlem bize message parametresine verdiğimiz şifrelenmiş veriyi çözme şeklidir.

 

Örnek Proje

Aşağıda sizin için hazırladığım bir örnek çalışma görebilirsiniz. Aynı zamanda çalışan halini de bu linkten görebilirsiniz. Bu yazıdaki kodlara github üzerinden de ulaşabilirsiniz.

<?php
define("SODIUM_SECRED_KEY", "oooooooooooooooooooooooooooooooo");

function safeEncrypt(string $message, string $key): string
{
    if (mb_strlen($key, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) {
        throw new RangeException('Key is not the correct size (must be 32 bytes).');
    }
    $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

    $cipher = base64_encode(
        $nonce .
            sodium_crypto_secretbox(
                $message,
                $nonce,
                $key
            )
    );
    sodium_memzero($message);
    sodium_memzero($key);
    return $cipher;
}

function safeDecrypt(string $encrypted, string $key): string
{
    $decoded = base64_decode($encrypted);
    $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
    $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');

    $plain = sodium_crypto_secretbox_open(
        $ciphertext,
        $nonce,
        $key
    );
    if (!is_string($plain)) {
        throw new Exception('Invalid MAC');
    }
    sodium_memzero($ciphertext);
    sodium_memzero($key);
    return $plain;
}
?>

<!DOCTYPE html>
<html lang="tr">

<head>

    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="author" content="Mustafa BÜKÜLMEZ">
    <title>PHP MD5 Şifreleme Öğretici</title>


    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" type="text/css" />

</head>

<body>


    <?php
    $sifrelenmis_veri  = "";
    if ($_POST) {
        $sifrelenecek_veri = $_POST["sifrelenecek_veri"];
        $sifrelenmis_veri =  safeEncrypt($sifrelenecek_veri, SODIUM_SECRED_KEY);
        $cozulmus_sifre = safeDecrypt($sifrelenmis_veri, SODIUM_SECRED_KEY);
    }

    ?>
    
    <div class="row" style="margin:100px;">
        <div class="container">
            <form action="#" method="POST">

                <div class="mb-3">
                    <label for="exampleFormControlInput1" class="form-label">Şifrelenecek Veri</label>
                    <input type="text" class="form-control" name="sifrelenecek_veri">
                </div>

                <div class="mb-3">
                    <label for="exampleFormControlTextarea1" class="form-label">Şifrelenmiş Veri</label>
                    <input class="form-control" name="sifrelenmis_veri" value="<?= $sifrelenmis_veri ?>" />
                </div>

                <div class="mb-3">
                    <label for="exampleFormControlTextarea1" class="form-label">Çözülmüş Veri</label>
                    <input class="form-control" name="cozulmus_sifre" value="<?= $cozulmus_sifre ?>" />
                </div>


                <button type="submit" class="btn btn-success">Kullan</button>
            </form>
        </div>
    </div>

</body>

</html>

 


PHP MD5 Şifreleme Kullanımı yazımda bu kadar arkadaşlar. Bu yazıdan sonra sizde projelerinizde rahatlıkla MD5 şifrelemeyi kullanabilirisiniz. Diğer yazılarımızda görüşmek üzere…

PHP Dersleri için başlattığım repoya bağlantıya tıklayarak ulaşabilirsiniz. Tüm PHP yazılarım için tıklayabilirsiniz.

Discord sunucuma katılmayı unutmayın. :D

Kodla kalın. :)

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)