PHP ile Güvenli Şifreleme ve Veri Koruma Teknikleri

PHP ile Güvenli Şifreleme ve Veri Koruma Teknikleri

Web uygulamalarında hassas verilerin korunması büyük önem taşır. PHP, şifreleme ve veri koruma için güçlü araçlar sunar.

1. Şifreleme ve Veri Korumanın Önemi

Kullanıcı verilerini güvence altına alır.
Yetkisiz erişimi önler.
Gizliliği ve veri bütünlüğünü korur.
KVKK ve GDPR gibi regülasyonlara uyumluluk sağlar.


2. PHP ile Hashleme Teknikleri

Hashleme, veriyi tek yönlü olarak şifreleyerek geri döndürülemez hale getirir. Parola saklama ve veri bütünlüğünü sağlamak için kullanılır.

2.1. bcrypt Kullanımı

$password = 'GucluParola123';
$hashed_password = password_hash($password, PASSWORD_BCRYPT);
echo $hashed_password;

Parola Doğrulama:

if (password_verify($password, $hashed_password)) {
    echo "Parola doğru";
} else {
    echo "Parola yanlış";
}

2.2. Argon2 Kullanımı (Önerilen)

Argon2, günümüzde en güvenli parola hashleme algoritmalarından biridir.

$hashed_password = password_hash($password, PASSWORD_ARGON2ID);

Argon2, brute-force saldırılarına karşı daha dayanıklıdır.


3. Simetrik Şifreleme (AES-256) Kullanımı

AES-256, simetrik anahtar kullanarak veriyi şifreleyip çözmek için kullanılan güçlü bir algoritmadır.

3.1. AES-256 ile Şifreleme

$key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$data = "Gizli Bilgi";
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
echo "Şifrelenmiş Veri: " . base64_encode($encrypted . '::' . $iv);

3.2. AES-256 ile Çözme

list($encrypted_data, $iv) = explode('::', base64_decode($encrypted), 2);
$decrypted = openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
echo "Çözülmüş Veri: " . $decrypted;

4. Asimetrik Şifreleme (RSA) Kullanımı

RSA, özel ve açık anahtar kullanarak şifreleme ve imzalama işlemleri yapar.

4.1. RSA Anahtar Üretme

openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -pubout -in private.pem -out public.pem

4.2. RSA ile Şifreleme

$public_key = file_get_contents('public.pem');
openssl_public_encrypt("Gizli Mesaj", $encrypted, $public_key);
echo base64_encode($encrypted);

4.3. RSA ile Çözme

$private_key = file_get_contents('private.pem');
openssl_private_decrypt(base64_decode($encrypted), $decrypted, $private_key);
echo $decrypted;

5. OpenSSL ile Veri Bütünlüğü ve Dijital İmzalama

Veri bütünlüğünü sağlamak için OpenSSL ile mesaj imzalama kullanılabilir.

5.1. Veri İmzalama

openssl_sign("Önemli Veri", $signature, $private_key, OPENSSL_ALGO_SHA256);
echo base64_encode($signature);

5.2. İmza Doğrulama

$valid = openssl_verify("Önemli Veri", base64_decode($signature), $public_key, OPENSSL_ALGO_SHA256);
echo $valid ? "İmza geçerli" : "İmza geçersiz";

6. HMAC ile Veri Bütünlüğü Sağlama

HMAC, bir mesajın değiştirilmediğini doğrulamak için kullanılır.

6.1. HMAC Kullanımı

$key = "guvenli_anahtar";
$message = "Önemli Bilgi";
$hmac = hash_hmac('sha256', $message, $key);
echo "HMAC: " . $hmac;

Bu, verinin bütünlüğünü garanti eder.