шифрование — Как зашифровать / расшифровать AES с переполнением стека Libsodium

Мне нужно зашифровать / расшифровать данные с помощью PHP. Я совершенно новичок в этом, однако я прочитал, что Libsodium-PHP — лучший инструмент для шифрования AES. Подобно другим библиотекам шифрования PHP, которые я исследовал, Libsoduim-PHP, по-видимому, почти не предлагал документации по использованию библиотеки (которую я смог найти). Может ли кто-либо, имеющий опыт работы с шифрованием PHP, указать мне направление на хороший учебный ресурс или написать несколько строк примера кода, используя Libsoduim-PHP?
Огромное спасибо за помощь,
Атлас

7

Решение

Подобно другим библиотекам шифрования PHP, которые я исследовал, Libsoduim-PHP, по-видимому, почти не предлагал документации по использованию библиотеки (которую я смог найти).

От страница libsodium-php Github вы найдете прямую ссылку на бесплатный онлайн книга это охватывает все, что вам нужно знать, чтобы начать работу с libsodium.

Последняя глава содержит рецепты libsodium, но каждая глава содержит подробную информацию об использовании.

Если вам конкретно нужен AES, прочитай это.

Если у вас нет требования «AES-или-бюст», нависшего над вашей головой, где отказ от использования AES означает, что ваш отдел уволен, а ваши разработчики сталкиваются с расстрелом, вам следует рассмотреть возможность использования crypto_secretbox который использует Xsalsa20 для шифрования и прикрепляет тег аутентификации Poly1305. (Это аутентифицированное шифрование, который вы хотите использовать почти всегда.)

Также посмотрите в галит если вы хотите легкий режим.

10

Другие решения

Версия PHP> = 7.2

Если вы используете PHP> = 7.2, используйте вместо этого встроенное расширение ядра натрия.

Пример реализации

<?php
//Simple Usage

/**
* Encrypt a message
*
* @param string $message - message to encrypt
* @param string $key - encryption key
* @return string
*/
function safeEncrypt($message, $key)
{
$nonce = random_bytes(
SODIUM_CRYPTO_SECRETBOX_NONCEBYTES
);

$cipher = base64_encode(
$nonce.
sodium_crypto_secretbox(
$message,
$nonce,
$key
)
);
sodium_memzero($message);
sodium_memzero($key);
return $cipher;
}

/**
* Decrypt a message
*
* @param string $encrypted - message encrypted with safeEncrypt()
* @param string $key - encryption key
* @return string
*/
function safeDecrypt($encrypted, $key)
{
$decoded = base64_decode($encrypted);
if ($decoded === false) {
throw new Exception('Scream bloody murder, the encoding failed');
}
if (mb_strlen($decoded, '8bit') < (SODIUM_CRYPTO_SECRETBOX_NONCEBYTES + SODIUM_CRYPTO_SECRETBOX_MACBYTES)) {
throw new Exception('Scream bloody murder, the message was truncated');
}
$nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
$ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');

$plain = sodium_crypto_secretbox_open(
$ciphertext,
$nonce,
$key
);
if ($plain === false) {
throw new Exception('the message was tampered with in transit');
}
sodium_memzero($ciphertext);
sodium_memzero($key);
return $plain;
}
//Encrypt & Decrypt your message
$key = sodium_crypto_secretbox_keygen();

$enc = safeEncrypt('Encrypt This String...', $key); //generates random  encrypted string (Base64 related)
echo $enc;
echo '<br>';
$dec = safeDecrypt($enc, $key); //decrypts encoded string generated via safeEncrypt function
echo $dec;
0

По вопросам рекламы [email protected]