ServBay’de Sodium PHP Uzantısı Nasıl Kullanılır?
ServBay, güçlü bir yerel web geliştirme entegre ortamı olarak, Sodium PHP uzantısını önceden yüklenmiş ve varsayılan olarak etkin halde sunar. Sodium, veri şifreleme ve güvenli iletişim için yaygın olarak kullanılan modern ve kolay kullanımlı bir şifreleme kütüphanesidir. ServBay sayesinde geliştiriciler, ek derleme veya yapılandırma gerektirmeksizin PHP uygulamalarında Sodium uzantısını kolayca kullanarak veri şifreleme ve çözme işlemlerini gerçekleştirebilir ve uygulamalarının veri güvenliğini sağlayabilirler.
Sodium Uzantısına Genel Bakış
Sodium (libsodium), basit, kullanımı kolay ve güvenli şifreleme özellikleri sunmak için tasarlanmış modern bir şifreleme kütüphanesidir. Simetrik şifreleme, asimetrik şifreleme, dijital imza, hash hesaplama, anahtar değişimi gibi birçok şifreleme algoritmasını ve işlevini destekler. PHP 7.2 sürümünden itibaren, Sodium kütüphanesi çekirdek bir uzantı olarak PHP'ye entegre edilmiştir ve artık kullanılmayan mcrypt kütüphanesinin modern ve daha güvenli alternatifi haline gelmiştir.
Temel Özellikler
- Kullanım Kolaylığı: Basit API arayüzleriyle veri şifreleme ve çözme işlemlerini geliştiriciler için çok daha erişilebilir kılar.
- Yüksek Güvenlik: Modern şifreleme algoritmaları ve en iyi uygulamalar ile veri güvenliğini maksimum seviyede sağlar.
- Çok Yönlülük: Simetrik ve asimetrik şifreleme, dijital imza, hash hesaplama, anahtar değişimi gibi çeşitli işlevler sunar.
- Çapraz Platform Desteği: Farklı işletim sistemleri ve programlama dillerinde kullanılabilir.
- Yüksek Performans: Şifreleme ve çözme işlemlerinde yüksek performans sunar, performans gerektiren uygulama senaryoları için uygundur.
Sodium, mcrypt’in Yerine Neden Geçti?
mcrypt, PHP’de uzun süre yaygın olarak kullanılan bir şifreleme kütüphanesiydi; ancak artık bakım görmediğinden ve güvenlik zafiyetleri barındırdığından, PHP 7.1’de kullanım dışı bırakılmış ve PHP 7.2’de tamamen kaldırılmıştır. Bu boşluğu doldurmak ve daha güvenli/kolay çözümler sunmak üzere Sodium modern ve güvenli bir alternatif olarak entegre edilmiştir. Sodium, daha güvenli, kullanışlı ve yüksek performanslı olduğundan, yeni projelerinizde mcrypt yerine Sodium kullanmanız şiddetle önerilir.
ServBay’de Sodium’un Kullanımı ve Aktivasyonu
ServBay, içerdiği PHP 7.2 ve üzeri sürümlerde Sodium uzantısını önceden derlenmiş ve varsayılan olarak etkinleştirilmiş şekilde sunar. Yani bir ServBay kullanıcısı olarak, Sodium’u manuel olarak yüklemeniz veya yapılandırmanız gerekmez. Sadece ServBay’i başlatıp istediğiniz PHP sürümünü çalıştırarak Sodium fonksiyonlarını doğrudan kodlarınızda kullanabilirsiniz.
Sodium’un etkin olup olmadığını doğrulamak için, ServBay’in phpinfo() özelliğinden faydalanabilirsiniz. ServBay arayüzünde kullandığınız PHP sürümünü seçip phpinfo()
seçeneğine tıklayın ve çıkan sayfada 'sodium' anahtar kelimesiyle arama yapın. Sodium modülüne ilişkin gerekli bilgileri göreceksiniz.
PHP Kodlarında Sodium Uzantısının Kullanımı
Sodium uzantısının aktif olduğunu doğruladıktan sonra, sunduğu işlevleri PHP projenizde kullanmaya başlayabilirsiniz. PHP kod dosyalarınızı ServBay’in web sitesi kök dizininde (varsayılan olarak /Applications/ServBay/www
) ilgili alt klasörlere yerleştirip, tarayıcınızda çalıştırabilirsiniz. İşte bazı temel kullanım örnekleri:
Örnek Kod (Simetrik Şifreleme)
Simetrik şifrelemede, şifreleme ve çözme işlemleri aynı anahtar ile yapılır.
<?php
// Şifrelenecek mesaj
$message = "This is a secret message from servbay.demo";
// Rastgele anahtar üretiliyor (Anahtar boyutu sabittir: SODIUM_CRYPTO_SECRETBOX_KEYBYTES)
$key = sodium_crypto_secretbox_keygen();
// Rastgele bir Nonce (tek kullanımlık sayı) üretiliyor, şifreleme ve çözme işlemlerinde aynı Nonce kullanılmalıdır
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// Anahtar ve Nonce ile mesaj şifreleniyor
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
echo "Orijinal mesaj: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Nonce genellikle şifreli veri ile birlikte saklanmalı ya da iletilmeli
echo "Şifreli metin (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Çözme işlemi ---
// Varsayalım ki şifreli veri, Nonce ve anahtar elimizde mevcut
$retrieved_ciphertext = $ciphertext; // Saklanan veya aktarılan şifreli veri
$retrieved_nonce = $nonce; // Saklanan veya aktarılan Nonce
$retrieved_key = $key; // Saklanan veya aktarılan anahtar
// Anahtar ve Nonce ile şifre çözülüyor
$decrypted = sodium_crypto_secretbox_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_key);
// Çözme başarılı mı kontrol ediliyor
if ($decrypted === false) {
echo "Şifre çözme başarısız oldu!\n";
} else {
echo "Çözülen mesaj: " . $decrypted . "\n";
}
// Hassas veriler temizleniyor, bellek sızıntısı önleniyor
sodium_memzero($key);
sodium_memzero($retrieved_key);
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Örnek Kod (Asimetrik Şifreleme)
Asimetrik şifrelemede, bir anahtar çifti bulunur: Açık anahtar (şifreleme) ve gizli anahtar (şifre çözme).
<?php
// Şifrelenecek mesaj
$message = "This is another secret message for servbay-demo user";
// Anahtar çifti üretiliyor (Açık anahtar şifreleme, gizli anahtar şifre çözme için)
$keypair = sodium_crypto_box_keypair();
$publicKey = sodium_crypto_box_publickey($keypair); // Karşı tarafa verilecek
$secretKey = sodium_crypto_box_secretkey($keypair); // Kendinizde saklanacak, ASLA paylaşılmamalı
echo "Açık anahtar (Base64): " . base64_encode($publicKey) . "\n";
echo "Gizli anahtar (Base64): [Gizli anahtar hassastır, burada görüntülenmemeli veya paylaşılmamalı]\n\n";
// --- Şifreleme işlemi (alıcıya ait açık anahtar kullanılır) ---
// Varsayalım ki gönderen kişinin elinde alıcıya ait $publicKey mevcut
// Rastgele bir Nonce üretiliyor, şifreleme ve çözmede aynı Nonce kullanılmalı
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
// Alıcının açık anahtarı ve göndericinin gizli anahtarı ile şifreleme (örnek sadeleştirilmiştir, doğrudan anahtar çifti kullanılıyor)
// Not: Gerçek uygulamalarda burada göndericinin gizli anahtarı + alıcının açık anahtarı kullanılmalı
// Sodium'un crypto_box işlevi aslında Curve25519 tabanlı Diffie-Hellman anahtar değişimine dayanır, iki tarafın da anahtar çiftine ihtiyacı vardır
// Bu örnekte işlemi sadeleştirmek için aynı anahtar çifti ile kendi kendimize şifreleyip çözüyoruz
$ciphertext = sodium_crypto_box($message, $nonce, $keypair); // Sadeleştirilmiş örnekte tüm anahtarlar keypair’de
echo "Orijinal mesaj: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Nonce, şifreli veri ile birlikte saklanmalı/iletilmeli
echo "Şifreli metin (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Çözme işlemi (alıcının gizli anahtarı kullanılır) ---
// Varsayalım ki alıcıda şifreli veri, Nonce ve kendi gizli anahtarı ($secretKey) ile göndericinin açık anahtarı ($publicKey) mevcut
// Bu örnekte yine doğrudan $keypair kullanılacak
$retrieved_ciphertext = $ciphertext;
$retrieved_nonce = $nonce;
$retrieved_keypair = $keypair; // Gizli anahtarı içeren anahtar çifti ile çözüme gidiliyor
// Kendi anahtar çiftiyle çözüm yapılıyor
$decrypted = sodium_crypto_box_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_keypair);
// Çözme başarılı mı kontrol ediliyor
if ($decrypted === false) {
echo "Şifre çözme başarısız oldu!\n";
} else {
echo "Çözülen mesaj: " . $decrypted . "\n";
}
// Hassas veriler temizleniyor
sodium_memzero($secretKey); // Gizli anahtar temizleniyor
sodium_memzero($keypair); // Anahtar çifti temizleniyor
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Örnek Kod (Dijital İmza)
Dijital imza mekanizması, hem mesajın bütünlüğünü hem de gönderenin kimliğini doğrulamak için kullanılır. İmzalama işlemi gizli anahtarla, doğrulama işlemi açık anahtarla yapılır.
<?php
// İmzalanacak mesaj
$message = "This message needs to be signed by servbay.demo";
// İmza anahtar çifti üretiliyor (Gizli anahtar ile imza, açık anahtar ile doğrulama yapılır)
$keypair = sodium_crypto_sign_keypair();
$publicKey = sodium_crypto_sign_publickey($keypair); // Doğrulama için paylaşılır
$secretKey = sodium_crypto_sign_secretkey($keypair); // KENDİNİZDE saklanır, asla paylaşılmaz
echo "Açık anahtar (Base64): " . base64_encode($publicKey) . "\n";
echo "Gizli anahtar (Base64): [Gizli anahtar hassastır, burada görüntülenmemeli veya paylaşılmamalı]\n\n";
// --- İmzalama işlemi (göndericiye ait gizli anahtar kullanılır) ---
$signature = sodium_crypto_sign_detached($message, $secretKey);
echo "Orijinal mesaj: " . $message . "\n";
echo "İmza (Base64): " . base64_encode($signature) . "\n\n";
// --- Doğrulama işlemi (göndericiye ait açık anahtar kullanılır) ---
// Varsayalım ki doğrulayan kişi mesajı, imzayı ve göndericiye ait açık anahtarı ($publicKey) aldı
$retrieved_message = $message;
$retrieved_signature = $signature;
$retrieved_publicKey = $publicKey;
// Açık anahtar ile imza doğrulanıyor
if (sodium_crypto_sign_verify_detached($retrieved_signature, $retrieved_message, $retrieved_publicKey)) {
echo "İmza geçerli! Mesaj değiştirilmemiş ve gerçekten anahtar sahibinden geliyor.\n";
} else {
echo "İmza geçersiz! Mesaj değiştirilmiş olabilir veya imza ilgili gizli anahtar tarafından oluşturulmamış.\n";
}
// Hassas veriler temizleniyor
sodium_memzero($secretKey); // Gizli anahtar temizleniyor
sodium_memzero($keypair); // Anahtar çifti temizleniyor
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Sonuç
ServBay sayesinde, önceden yüklenmiş ve varsayılan olarak etkin Sodium PHP uzantısını çok kolay şekilde kullanabilirsiniz. Bu sayede yerel geliştirme ortamınızda Sodium’un kurulum ve yapılandırma karmaşasına gerek kalmaz; şifreleme işlemlerinin güçlü potansiyelinden uygulamanızın güvenliğini artırmak için doğrudan yararlanabilirsiniz. mcrypt yerine modern bir alternatif olan Sodium, güvenilir ve güvenli web uygulamaları geliştirmek için temel bir araçtır. ServBay ile bu süreci basitleştirerek, verimli ve güvenli yerel geliştirme ortamları oluşturmanıza yardımcı olur.