Jak używać rozszerzenia Sodium PHP w ServBay
ServBay jako potężne, lokalne środowisko do integracji rozwoju webowego posiada wstępnie zainstalowane i domyślnie aktywowane rozszerzenie Sodium PHP. Sodium to nowoczesna, łatwa w użyciu biblioteka kryptograficzna, szeroko stosowana do szyfrowania danych i bezpiecznej komunikacji. Dzięki ServBay programiści mogą z łatwością korzystać z rozszerzenia Sodium do szyfrowania i odszyfrowywania danych w aplikacjach PHP — bez potrzeby dodatkowej kompilacji czy konfiguracji — zapewniając bezpieczeństwo danych aplikacji.
Wprowadzenie do rozszerzenia Sodium
Sodium (libsodium) to nowoczesna biblioteka kryptograficzna zaprojektowana, by dostarczać proste, bezpieczne i łatwe w użyciu funkcje szyfrowania. Obsługuje wiele algorytmów i operacji kryptograficznych, takich jak szyfrowanie symetryczne, asymetryczne, podpisy cyfrowe, haszowanie, wymiana kluczy itp. Od wersji PHP 7.2 biblioteka Sodium jest integralną częścią PHP jako oficjalne rozszerzenie i stanowi nowoczesny, bezpieczniejszy zamiennik przestarzałej biblioteki mcrypt.
Najważniejsze cechy
- Łatwość użycia: Prosty interfejs API usprawnia proces szyfrowania i odszyfrowywania dla programistów.
- Wysokie bezpieczeństwo: Korzysta z nowoczesnych algorytmów kryptograficznych i najlepszych praktyk w celu maksymalnej ochrony danych.
- Wszechstronność: Obsługuje szyfrowanie symetryczne, asymetryczne, podpisy cyfrowe, funkcje haszujące, wymianę kluczy i więcej.
- Wieloplatformowość: Może być używany na wielu systemach operacyjnych i w różnych językach programowania.
- Wydajność: Szyfrowanie i odszyfrowywanie przebiega szybko, dzięki czemu doskonale nadaje się do zastosowań wymagających wysokiej wydajności.
Sodium jako zamiennik mcrypt
Biblioteka mcrypt była przez długi czas popularnym rozwiązaniem do szyfrowania w PHP, jednak z racji braku wsparcia i potencjalnych luk bezpieczeństwa została wycofana w PHP 7.1, a następnie usunięta w PHP 7.2. Sodium zostało wprowadzone jako jej nowoczesny i bezpieczny następca. Biblioteka Sodium zapewnia wyższy poziom bezpieczeństwa, jest łatwiejsza w użyciu oraz wydajniejsza, dlatego zdecydowanie zaleca się jej używanie do szyfrowania i odszyfrowywania danych w nowych projektach zamiast przestarzałego mcrypt.
Dostępność i aktywacja Sodium w ServBay
ServBay dostarcza wstępnie skompilowaną i domyślnie aktywowaną obsługę rozszerzenia Sodium dla PHP 7.2 oraz nowszych wersji. Oznacza to, że jako użytkownik ServBay nie musisz ręcznie instalować ani konfigurować Sodium. Wystarczy uruchomić ServBay i wybrać odpowiednią wersję PHP, a funkcje Sodium będą gotowe do użycia w Twoim kodzie.
Aby sprawdzić, czy rozszerzenie Sodium jest aktywne, możesz użyć funkcji phpinfo() w ServBay. W panelu ServBay wybierz używaną wersję PHP, znajdź opcję phpinfo()
i wyszukaj na wyświetlonej stronie frazę "sodium". Powinieneś zobaczyć szczegółowe informacje dotyczące tego modułu.
Użycie rozszerzenia Sodium w kodzie PHP
Po upewnieniu się, że rozszerzenie Sodium jest włączone, możesz korzystać z jego funkcji w swoim projekcie PHP. Umieść plik PHP w odpowiednim katalogu strony w głównym katalogu WWW ServBay (domyślnie /Applications/ServBay/www
), a następnie uruchom go przez przeglądarkę. Poniżej znajdziesz przykłady użycia rozszerzenia Sodium:
Przykładowy kod: szyfrowanie symetryczne
Szyfrowanie symetryczne wykorzystuje ten sam klucz do szyfrowania i odszyfrowywania.
php
<?php
// Wiadomość do zaszyfrowania
$message = "This is a secret message from servbay.demo";
// Generowanie losowego klucza (długość klucza jest stała: SODIUM_CRYPTO_SECRETBOX_KEYBYTES)
$key = sodium_crypto_secretbox_keygen();
// Generowanie losowego Nonce (Number used once), który musi być taki sam przy szyfrowaniu i odszyfrowywaniu
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// Szyfrowanie przy użyciu klucza i Nonce
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
echo "Oryginalna wiadomość: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Nonce należy przechowywać lub przesyłać razem z szyfrogramem
echo "Szyfrogram (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Odszyfrowanie ---
// Zakładamy, że posiadamy szyfrogram, Nonce i klucz
$retrieved_ciphertext = $ciphertext; // Szyfrogram pobrany z magazynu lub transmisji
$retrieved_nonce = $nonce; // Nonce pobrany z magazynu lub transmisji
$retrieved_key = $key; // Klucz pobrany z magazynu lub transmisji
// Odszyfrowanie przy użyciu klucza i Nonce
$decrypted = sodium_crypto_secretbox_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_key);
// Sprawdzenie, czy odszyfrowanie się powiodło
if ($decrypted === false) {
echo "Odszyfrowanie nie powiodło się!\n";
} else {
echo "Odszyfrowana wiadomość: " . $decrypted . "\n";
}
// Wyczyszczenie wrażliwych danych z pamięci
sodium_memzero($key);
sodium_memzero($retrieved_key);
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
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
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
Przykładowy kod: szyfrowanie asymetryczne
Szyfrowanie asymetryczne wykorzystuje parę kluczy (publiczny i prywatny). Klucz publiczny służy do szyfrowania, prywatny do odszyfrowywania.
php
<?php
// Wiadomość do zaszyfrowania
$message = "This is another secret message for servbay-demo user";
// Generowanie pary kluczy (klucz publiczny do szyfrowania, klucz prywatny do odszyfrowywania)
$keypair = sodium_crypto_box_keypair();
$publicKey = sodium_crypto_box_publickey($keypair); // Przekazujemy odbiorcy
$secretKey = sodium_crypto_box_secretkey($keypair); // Zachowujemy dla siebie, nigdy nie udostępniamy
echo "Klucz publiczny (Base64): " . base64_encode($publicKey) . "\n";
echo "Klucz prywatny (Base64): [Klucz prywatny jest poufny i nie powinien być wyświetlany ani udostępniany!]\n\n";
// --- Szyfrowanie (przy użyciu klucza publicznego odbiorcy) ---
// Załóżmy, że nadawca posiada klucz publiczny odbiorcy $publicKey
// Generowanie losowego Nonce, musi być taki sam przy szyfrowaniu i odszyfrowywaniu
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
// Szyfrowanie przy użyciu klucza publicznego i prywatnego (zazwyczaj klucz publiczny odbiorcy i prywatny nadawcy)
// W przykładzie uproszczonym - jedna para kluczy (użytkownik szyfruje sam dla siebie)
// W praktyce: prywatny klucz nadawcy + publiczny klucz odbiorcy
$ciphertext = sodium_crypto_box($message, $nonce, $keypair); // Tu keypair zawiera oba klucze
echo "Oryginalna wiadomość: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Nonce do przechowywania lub przesłania razem z szyfrogramem
echo "Szyfrogram (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Odszyfrowanie (przy użyciu klucza prywatnego odbiorcy) ---
// Załóżmy, że odbiorca posiada szyfrogram, Nonce, swój klucz prywatny ($secretKey) oraz klucz publiczny nadawcy ($publicKey)
// W tym uproszczonym przykładzie używamy $keypair
$retrieved_ciphertext = $ciphertext;
$retrieved_nonce = $nonce;
$retrieved_keypair = $keypair; // Dekodujemy przy użyciu pary kluczy (zawierającej prywatny klucz)
$decrypted = sodium_crypto_box_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_keypair);
// Sprawdzenie, czy odszyfrowanie się powiodło
if ($decrypted === false) {
echo "Odszyfrowanie nie powiodło się!\n";
} else {
echo "Odszyfrowana wiadomość: " . $decrypted . "\n";
}
// Wyczyszczenie wrażliwych danych
sodium_memzero($secretKey); // Usuń klucz prywatny z pamięci
sodium_memzero($keypair); // Usuń parę kluczy z pamięci
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
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
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
Przykładowy kod: podpis cyfrowy
Podpis cyfrowy służy do sprawdzenia integralności wiadomości i autentyczności nadawcy. Podpisujemy prywatnym kluczem, weryfikujemy publicznym.
php
<?php
// Wiadomość do podpisania
$message = "This message needs to be signed by servbay.demo";
// Generowanie pary kluczy do podpisu (prywatny do podpisywania, publiczny do weryfikacji)
$keypair = sodium_crypto_sign_keypair();
$publicKey = sodium_crypto_sign_publickey($keypair); // Przekazujemy weryfikatorowi
$secretKey = sodium_crypto_sign_secretkey($keypair); // Zachowujemy wyłącznie dla siebie
echo "Klucz publiczny (Base64): " . base64_encode($publicKey) . "\n";
echo "Klucz prywatny (Base64): [Klucz prywatny jest poufny i nie powinien być wyświetlany ani udostępniany!]\n\n";
// --- Podpisywanie wiadomości (prywatny klucz nadawcy) ---
$signature = sodium_crypto_sign_detached($message, $secretKey);
echo "Oryginalna wiadomość: " . $message . "\n";
echo "Podpis (Base64): " . base64_encode($signature) . "\n\n";
// --- Weryfikacja podpisu (publiczny klucz nadawcy) ---
// Załóżmy, że weryfikator posiada wiadomość, podpis i klucz publiczny nadawcy ($publicKey)
$retrieved_message = $message;
$retrieved_signature = $signature;
$retrieved_publicKey = $publicKey;
// Weryfikacja podpisu przy użyciu klucza publicznego
if (sodium_crypto_sign_verify_detached($retrieved_signature, $retrieved_message, $retrieved_publicKey)) {
echo "Podpis poprawny! Wiadomość nie została zmieniona i pochodzi od właściciela klucza prywatnego.\n";
} else {
echo "Podpis niepoprawny! Wiadomość mogła zostać zmieniona lub podpis nie został wygenerowany przez odpowiedni klucz prywatny.\n";
}
// Wyczyszczenie wrażliwych danych
sodium_memzero($secretKey); // Usuń klucz prywatny z pamięci
sodium_memzero($keypair); // Usuń parę kluczy z pamięci
?>
1
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
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
Podsumowanie
Dzięki ServBay programiści mogą wygodnie korzystać z domyślnie włączonego, wbudowanego rozszerzenia Sodium PHP, eliminując potrzebę instalacji i konfiguracji tego narzędzia w środowisku lokalnym. Możesz skoncentrować się na wykorzystaniu zaawansowanych funkcji szyfrowania Sodium, by zwiększyć bezpieczeństwo swoich aplikacji. Sodium jako nowoczesny zamiennik mcrypt jest kluczowym narzędziem do budowania bezpiecznych i niezawodnych aplikacji webowych. ServBay upraszcza ten proces, wspierając twórców w budowie wydajnego oraz bezpiecznego środowiska do rozwoju lokalnego.