PHP 7.4.25 Released!

sodium_crypto_box

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_boxШифрование открытым ключом с проверкой подлинности

Описание

sodium_crypto_box(string $message, string $nonce, string $key_pair): string

Шифрует сообщение с использованием асимметричной криптографии (с открытым ключом).

Алгоритм, используемый функциями с префиксом sodium_crypto_box(): Эллиптическая кривая Диффи-Хеллмана на кривой Монтгомери, Curve25519; обычно сокращённо X25519.

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

message

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

nonce

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

key_pair

Смотрите sodium_crypto_box_keypair_from_secretkey_and_publickey(). Должен включать секретный ключ X25519 отправителя и открытый ключ X25519 получателя.

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

Возвращает зашифрованное сообщение (зашифрованный текст плюс тег аутентификации). Зашифрованный текст будет на 16 байтов длиннее, чем открытый текст, и необработанная двоичная строка. Смотрите sodium_bin2base64() для безопасного кодирования для хранения.

add a note add a note

User Contributed Notes 1 note

up
7
craig at craigfrancis dot co dot uk
3 years ago
Here's a quick example on how to use sodium_crypto_box(); where you have 2 people exchanging a $message, where person 1 encrypts it so that only person 2 can decrypt it, and be sure that person 1 actually sent it (without it being tampered with).

<?php

$keypair1
= sodium_crypto_box_keypair();
$keypair1_public = sodium_crypto_box_publickey($keypair1);
$keypair1_secret = sodium_crypto_box_secretkey($keypair1);

$keypair2 = sodium_crypto_box_keypair();
$keypair2_public = sodium_crypto_box_publickey($keypair2);
$keypair2_secret = sodium_crypto_box_secretkey($keypair2);

//--------------------------------------------------
// Person 1, encrypting

$message = 'hello';

$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);

$encryption_key = sodium_crypto_box_keypair_from_secretkey_and_publickey($keypair1_secret, $keypair2_public);
$encrypted = sodium_crypto_box($message, $nonce, $encryption_key);

echo
base64_encode($encrypted) . "\n";

//--------------------------------------------------
// Person 2, decrypting

$decryption_key = sodium_crypto_box_keypair_from_secretkey_and_publickey($keypair2_secret, $keypair1_public);
$decrypted = sodium_crypto_box_open($encrypted, $nonce, $decryption_key);

echo
$decrypted . "\n";

?>
To Top