sodium_crypto_box

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_boxChiffrement asymétrique authentifié

Description

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

Chiffre un message en utilisant la cryptographie asymétrique (clé publique).

L'algorithme utilisé par les fonctions préfixées par sodium_crypto_box() est Diffie-Hellman sur la courbe de Montgomery, Curve25519; généralement abrégée en X25519.

Liste de paramètres

message

Le message à chiffrer.

nonce

Un nombre qui doit être utilisé une seule fois, par message. 24 octets de long. Ceci est une limite suffisamment grande pour être générée aléatoirement (i.e. random_bytes()).

key_pair

Voir sodium_crypto_box_keypair_from_secretkey_and_publickey(). Ceci inclut la clé publique de l'expéditeur et la clé secrète du destinataire.

Valeurs de retour

Renvoie le message chiffré (ciphertext plus étiquette d'authentification). Le texte chiffré sera 16 octets plus long que le texte en clair, et une chaîne binaire brute. Voir sodium_bin2base64() pour un encodage sûr pour le stockage.

add a note

User Contributed Notes 1 note

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