CakeFest 2024: The Official CakePHP Conference

sodium_crypto_secretbox

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_secretboxШифрование с общим ключом с проверкой подлинности

Описание

sodium_crypto_secretbox(string $message, string $nonce, string $key): string

Шифрование сообщения симметричным (общим) ключом.

Список параметров

message

Текстовое сообщение, которое нужно зашифровать.

nonce

Номер, который необходимо использовать только один раз для каждого сообщения. Длина 24 байта. Это достаточно большая граница для случайной генерации (например, random_bytes()).

key

Ключ шифрования (256 бит).

Возвращаемые значения

Возвращает зашифрованную строку.

Ошибки

Примеры

Пример #1 Пример использования sodium_crypto_secretbox()

<?php
// $key должен храниться в секрете.
$key = sodium_crypto_secretbox_keygen();
// Не используйте $nonce повторно с тем же ключом
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$plaintext = "message to be encrypted";
$ciphertext = sodium_crypto_secretbox($plaintext, $nonce, $key);

var_dump(bin2hex($ciphertext));
// Для расшифровки $ciphertext требуются те же имя и ключ.
var_dump(sodium_crypto_secretbox_open($ciphertext, $nonce, $key));
?>

Вывод приведённого примера будет похож на:

string(78) "3a1fa3e9f7b72ef8be51d40abf8e296c6899c185d07b18b4c93e7f26aa776d24c50852cd6b1076"
string(23) "message to be encrypted"

Смотрите также

  • sodium_crypto_secretbox_open() - Расшифровка с использованием общего ключа с проверкой подлинности
  • sodium_crypto_secretbox_keygen() - Создаёт случайный ключ для sodium_crypto_secretbox
  • random_bytes() - Получает криптографически безопасные случайные байты

add a note

User Contributed Notes 1 note

up
0
celso fontes
3 years ago
An example to how encrypt or decrypt using sodium:

<?php

$key
= random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox("Hello World !", $nonce, $key);

$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
if (
$plaintext === false) {
throw new
Exception("Bad ciphertext");
}

echo
$plaintext;
To Top