Як використовувати розширення Sodium PHP у ServBay
ServBay — потужне інтегроване середовище для локальної розробки веб-додатків, у якому модуль Sodium для PHP попередньо встановлений і ввімкнений за замовчуванням. Sodium — це сучасна, зручна у використанні криптографічна бібліотека, широко застосовується для шифрування даних і захищеної комунікації. Завдяки ServBay розробники можуть легко використовувати можливості Sodium у PHP-додатках для шифрування та розшифрування даних без додаткової компіляції чи налаштувань, гарантуючи безпеку своїх застосунків.
Вступ до розширення Sodium
Sodium (libsodium) — це сучасна криптографічна бібліотека, створена для того, щоб забезпечити простий, зручний і безпечний інтерфейс для шифрування. Вона підтримує різноманітні алгоритми та функціональність, такі як симетричне та асиметричне шифрування, цифрові підписи, хешування, обмін ключами тощо. Починаючи з версії PHP 7.2, бібліотека Sodium інтегрована в ядро PHP як стандартний модуль і є сучасною та безпечнішою альтернативою застарілій бібліотеці mcrypt.
Основні переваги
- Легкість у використанні: Простий і зрозумілий API, що дозволяє розробникам легко реалізовувати шифрування й дешифрування даних.
- Високий рівень безпеки: Використання сучасних криптоалгоритмів і кращих практик для забезпечення цілісності й конфіденційності даних.
- Багатофункціональність: Підтримка симетричного та асиметричного шифрування, цифрових підписів, хешування, обміну ключами й іншого функціоналу.
- Кросплатформеність: Працює на різних операційних системах і підтримується багатьма мовами програмування.
- Висока продуктивність: Операції шифрування та дешифрування виконуються швидко і підходять для вимогливих до продуктивності застосунків.
Sodium як заміна mcrypt
Бібліотека mcrypt свого часу була широко застосована у PHP для задач шифрування, однак її подальша підтримка була припинена, а у версії PHP 7.1 вона була позначена як застаріла, а у PHP 7.2 — повністю видалена. Sodium була додана до PHP як сучасний, безпечний і зручний замінник mcrypt. Sodium забезпечує вищий рівень безпеки, простий синтаксис і оптимізовану продуктивність; настійливо рекомендується використовувати Sodium для нових проектів і поступово мігрувати з mcrypt для шифрування та дешифрування даних.
Доступність і активація Sodium у ServBay
У PHP 7.2 і новіших версіях, які постачаються у складі ServBay, модуль Sodium вже попередньо зібраний і активований за замовчуванням. Тобто, вам не потрібно здійснювати ручну установку або налаштування Sodium. Достатньо запустити відповідну версію PHP через інтерфейс ServBay, і ви одразу зможете користуватися функціями Sodium у коді.
Щоб впевнитися, що Sodium активовано, скористайтеся функцією phpinfo() у ServBay. У вибраному PHP-профілі відкрийте phpinfo() і знайдіть у виведеній інформації розділ 'sodium' — тут ви побачите параметри та статус цього модуля.
Використання розширення Sodium у PHP-коді
Коли впевнені, що Sodium увімкнено, ви можете починати користуватись його функціями у своїх PHP-проектах. Збережіть свій PHP-файл у відповідній піддиректорії кореня сайтів ServBay (типово це /Applications/ServBay/www
), після чого відкрийте його через браузер. Нижче наведено кілька базових прикладів використання:
Приклад коду (симетричне шифрування)
Симетричне шифрування використовує один і той самий ключ як для шифрування, так і для дешифрування.
php
<?php
// Повідомлення для шифрування
$message = "This is a secret message from servbay.demo";
// Генеруємо випадковий ключ (довжина повинна відповідати SODIUM_CRYPTO_SECRETBOX_KEYBYTES)
$key = sodium_crypto_secretbox_keygen();
// Генеруємо випадковий nonce (одноразове число), має бути однаковим і для шифрування, і для дешифрування
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// Шифруємо повідомлення за допомогою ключа і nonce
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
echo "Оригінальне повідомлення: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Nonce необхідно зберігати/передавати разом із шифротекстом
echo "Шифротекст (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Процес дешифрування ---
// Припустимо, що ми вже отримали шифротекст, nonce і ключ
$retrieved_ciphertext = $ciphertext; // Отриманий шифротекст (зберігання/передача)
$retrieved_nonce = $nonce; // Отриманий nonce (зберігання/передача)
$retrieved_key = $key; // Отриманий ключ (зберігання/передача)
// Дешифруємо за допомогою ключа і nonce
$decrypted = sodium_crypto_secretbox_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_key);
// Перевіряємо, чи вдалося розшифрувати
if ($decrypted === false) {
echo "Помилка дешифрування!\n";
} else {
echo "Розшифроване повідомлення: " . $decrypted . "\n";
}
// Очищаємо чутливі дані для захисту від витоку з пам'яті
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
Приклад коду (асиметричне шифрування)
Асиметричне шифрування використовує пару ключів: відкритий для шифрування й закритий для розшифрування.
php
<?php
// Повідомлення для шифрування
$message = "This is another secret message for servbay-demo user";
// Генеруємо пару ключів (публічний для шифрування, секретний для дешифрування)
$keypair = sodium_crypto_box_keypair();
$publicKey = sodium_crypto_box_publickey($keypair); // Передається іншій стороні
$secretKey = sodium_crypto_box_secretkey($keypair); // Зберігається у себе, не розголошувати
echo "Публічний ключ (Base64): " . base64_encode($publicKey) . "\n";
echo "Секретний ключ (Base64): [секретний ключ не повинен виводитися чи розголошуватися]\n\n";
// --- Процес шифрування (використовується публічний ключ одержувача) ---
// Припустимо, відправник має публічний ключ $publicKey
// Генеруємо випадковий nonce; має збігатися і для шифрування, і для дешифрування
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
// Шифруємо за допомогою публічного ключа й секретного ключа відправника.
// У реальних умовах: публічний ключ одержувача + свій секретний.
// Sodium використовує Diffie-Hellman на базі Curve25519 для обміну ключами.
// Для спрощення тут одна й та сама пара ключів (шифрування й дешифрування тією ж особою).
$ciphertext = sodium_crypto_box($message, $nonce, $keypair); // keypair містить обидва ключі
echo "Оригінальне повідомлення: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Nonce треба зберігати/передавати разом із шифротекстом
echo "Шифротекст (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Процес дешифрування (використовується секретний ключ одержувача) ---
// Припустимо, одержувач має шифротекст, nonce, свій секретний ключ ($secretKey) і публічний ключ відправника ($publicKey)
// У цьому прикладі — використовуємо $keypair
$retrieved_ciphertext = $ciphertext;
$retrieved_nonce = $nonce;
$retrieved_keypair = $keypair; // Для дешифрування використовуємо пару ключів
// Дешифруємо за допомогою своєї пари ключів
$decrypted = sodium_crypto_box_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_keypair);
// Перевіряємо, чи вдалося розшифрувати
if ($decrypted === false) {
echo "Помилка дешифрування!\n";
} else {
echo "Розшифроване повідомлення: " . $decrypted . "\n";
}
// Очищаємо чутливі дані
sodium_memzero($secretKey); // Очищення секретного ключа
sodium_memzero($keypair); // Очищення пари ключів
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
54
55
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
Приклад коду (цифровий підпис)
Цифровий підпис підтверджує цілісність повідомлення й справжність відправника. Підпис створюється секретним ключем, перевіряється — публічним.
php
<?php
// Повідомлення для підпису
$message = "This message needs to be signed by servbay.demo";
// Генеруємо пару ключів для підпису (секретний для підпису, публічний для перевірки)
$keypair = sodium_crypto_sign_keypair();
$publicKey = sodium_crypto_sign_publickey($keypair); // Надати верифікатору
$secretKey = sodium_crypto_sign_secretkey($keypair); // Тримати у таємниці, не розголошувати
echo "Публічний ключ (Base64): " . base64_encode($publicKey) . "\n";
echo "Секретний ключ (Base64): [секретний ключ не повинен виводитися чи розголошуватися]\n\n";
// --- Процес підпису (секретний ключ відправника) ---
$signature = sodium_crypto_sign_detached($message, $secretKey);
echo "Оригінальне повідомлення: " . $message . "\n";
echo "Підпис (Base64): " . base64_encode($signature) . "\n\n";
// --- Верифікація підпису (публічний ключ відправника) ---
// Припустимо, верифікатор має повідомлення, підпис і публічний ключ ($publicKey)
$retrieved_message = $message;
$retrieved_signature = $signature;
$retrieved_publicKey = $publicKey;
// Перевіряємо підпис за допомогою публічного ключа
if (sodium_crypto_sign_verify_detached($retrieved_signature, $retrieved_message, $retrieved_publicKey)) {
echo "Підпис дійсний! Повідомлення не змінено й надійшло від власника секретного ключа.\n";
} else {
echo "Підпис недійсний! Можливо, повідомлення було змінено, або підпис не відповідає ключу.\n";
}
// Очищаємо чутливі дані
sodium_memzero($secretKey); // Очищення секретного ключа
sodium_memzero($keypair); // Очищення пари ключів
?>
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
Висновок
Завдяки ServBay розробники можуть просто та швидко використовувати розширення Sodium, яке попередньо встановлене і ввімкнене за замовчуванням. Це дозволяє уникнути складностей із встановленням і налаштуванням Sodium у локальному середовищі, фокусуючись на реалізації потужного шифрування для покращення безпеки застосунків. Sodium — це сучасна альтернатива mcrypt і один з ключових інструментів для побудови захищених і надійних веб-додатків. ServBay автоматизує цей процес і допомагає розробникам створювати швидке й безпечне локальне середовище розробки.