TGViewer
PHP Portal | Программирование PHP Portal | Программирование @phpgx · 4.64K subscribers
Post #191 2.47K
Защита конфиденциальных данных с помощью шифрования и расшифровки

➖ Задача: Безопасно зашифровать данные, чтобы защитить их от несанкционированного доступа, и расшифровать их при необходимости.

➖ Решение:
Используйте расширение Sodium для симметричного шифрования данных.

1️⃣ Генерация ключа шифрования

Сначала нужно создать секретный ключ для шифрования:
$key = sodium_crypto_secretbox_keygen(); // Генерация ключа
file_put_contents('secret.key', $key); // Сохранение ключа в файл


2️⃣ Шифрование данных

$message = "Конфиденциальные данные";
$key = file_get_contents('secret.key'); // Получение ключа из файла

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); // Генерация случайного вектора инициализации
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);

// Сохранение зашифрованных данных
file_put_contents('data.enc', $nonce . $ciphertext);

echo "Данные успешно зашифрованы!";


3️⃣ Расшифровка данных
$key = file_get_contents('secret.key');
$encrypted = file_get_contents('data.enc');

$nonce = mb_substr($encrypted, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
$ciphertext = mb_substr($encrypted, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');

$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);

if ($decrypted === false) {
throw new Exception("Ошибка расшифровки данных!");
}

echo "Расшифрованные данные: {$decrypted}";



🔹Ключ: Генерируется однократно и должен храниться безопасно (например, за пределами кода, в конфигурационных файлах или хранилище секретов).
🔹Nonce (вектор инициализации): Должен быть уникальным для каждого сообщения, но его можно передавать в открытом виде вместе с шифротекстом.
🔹Алгоритм: Sodium использует AES-256-GCM или подобные современные алгоритмы для безопасного шифрования.


➖ Когда использовать:
🔹Защита конфиденциальной информации (паролей, токенов, личных данных).
🔹Шифрование конфигурационных файлов.
🔹Безопасное хранение данных в базе данных.

Никогда не храните ключи шифрования вместе с данными. Используйте безопасные хранилища, такие как HashiCorp Vault или AWS Secrets Manager.

👉 @PHPgx | #заметки
  • 👍 10
  • ❤ 4
More from @phpgx
  1. Sep 21, 2026Совет по Laravel Все исходящие HTTP-ответы можно обрабатывать в одном месте с помощью Http…
  2. Sep 11, 2026Laravel tip Нужно получить все записи, кроме последних 5? skip() сам по себе игнорируется,…
  3. Sep 7, 2026В Laravel 13.30 появился удобный метод для Collection Использовали chunkWhile(), чтобы про…
  4. Sep 7, 2026PHP-совет В числовых литералах можно использовать подчёркивания, чтобы визуально группиров…
  5. Sep 2, 2026Он не из наших 👉 @PHPgx
  6. Aug 26, 2026TypePHP вышел в open source раньше запланированного 🎉 Изначально релиз исходников был нам…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →