sodium_crypto_box

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_boxCifrado asimétrico autenticado

Descripción

sodium_crypto_box(#[\SensitiveParameter] string $message, string $nonce, #[\SensitiveParameter] string $key_pair): string

Cifra un mensaje utilizando criptografía asimétrica (clave pública).

El algoritmo utilizado por las funciones prefijadas por sodium_crypto_box() es Diffie-Hellman sobre la curva de Montgomery, Curve25519; generalmente abreviado como X25519.

Parámetros

message

El mensaje a cifrar.

nonce

Un número que debe ser utilizado una sola vez, por mensaje. 24 bytes de largo. Este es un límite suficientemente grande para ser generado aleatoriamente (i.e. random_bytes()).

key_pair

Ver sodium_crypto_box_keypair_from_secretkey_and_publickey(). Esto incluye la clave pública del remitente y la clave secreta del destinatario.

Valores devueltos

Devuelve el mensaje cifrado (ciphertext más etiqueta de autenticación). El texto cifrado será 16 bytes más largo que el texto en claro, y una string binaria bruta. Ver sodium_bin2base64() para un encodaje seguro para el almacenamiento.

add a note

User Contributed Notes 1 note

up
11
craig at craigfrancis dot co dot uk
7 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