PHP Sodium расширение предоставляет набор функций для работы с криптографией, включая шифрование AEGIS. AEGIS (Authenticated Encryption with Associated Data) - это алгоритм шифрования, который обеспечивает аутентификацию и целостность данных, а также конфиденциальность. Вот пример использования AEGIS для шифрования и дешифрования данных с помощью PHP Sodium:

Установка PHP Sodium

Для использования PHP Sodium убедитесь, что у вас установлено расширение Sodium. Оно должно быть включено по умолчанию в PHP 7.2 и выше. Вы можете проверить его наличие, выполнив следующую команду в консоли:

php -m | grep sodium

Если вы видите sodium в выводе, это означает, что расширение установлено и готово к использованию.

Пример шифрования и дешифрования с AEGIS

<?php

// Данные для шифрования
$plaintext = "Hello, World!";
$ad = "Additional Data"; // Дополнительные данные для аутентификации

// Ключ и несекретный параметр
$key = sodium_crypto_aead_aes256gcm_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES);

// Шифрование
$ciphertext = sodium_crypto_aead_aes256gcm_encrypt($plaintext, $ad, $nonce, $key);

// Дешифрование
$decrypted = sodium_crypto_aead_aes256gcm_decrypt($ciphertext, $ad, $nonce, $key);

if ($decrypted === false) {
    throw new Exception("Decryption failed");
}

echo "Decrypted: " . $decrypted . PHP_EOL;

В этом примере:

  • $plaintext - это исходные данные, которые вы хотите зашифровать.
  • $ad - это дополнительные данные, которые используются для аутентификации. Они должны быть теми же при дешифровании.
  • $key - это ключ шифрования, который генерируется с помощью sodium_crypto_aead_aes256gcm_keygen().
  • $nonce - это несекретный параметр, который должен быть уникальным для каждого шифрования. В этом примере он генерируется случайным образом с помощью random_bytes().
  • sodium_crypto_aead_aes256gcm_encrypt используется для шифрования данных.
  • sodium_crypto_aead_aes256gcm_decrypt используется для дешифрования данных.

Обратите внимание, что ключ и несекретный параметр ($key и $nonce) должны быть сохранены в безопасном месте и использоваться для шифрования и дешифрования данных. Несекретный параметр должен быть уникальным для каждого шифрования, но не секретным и может быть передан вместе с зашифрованными данными.