PHP Conference Fukuoka 2025

sodium_crypto_box

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_boxCriptografia de chave pública autenticada

Descrição

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

Criptografa uma mensagem usando criptografia assimétrica (chave pública).

O algoritmo usado por funções prefixadas com sodium_crypto_box() é Curva Elíptica Diffie-Hellman sobre a curva de Montgomery, Curva25519; geralmente abreviada como X25519.

Parâmetros

message

A mensagem a ser criptografada.

nonce

Um número que deve ser usado apenas uma vez por mensagem. 24 bytes de comprimento. Este é um limite grande o suficiente para ser gerado aleatoriamente (por exemplo, random_bytes()).

key_pair

Consulte sodium_crypto_box_keypair_from_secretkey_and_publickey(). Isso deve incluir a chave secreta X25519 do remetente e a chave pública X25519 do destinatário.

Valor Retornado

Retorna a mensagem criptografada (texto cifrado mais tag de autenticação). O texto cifrado será 16 bytes maior que o texto simples e uma string binária bruta. Consulte sodium_bin2base64() para codificação segura para armazenamento.

adicionar nota

Notas de Usuários 1 note

up
7
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