sodium_crypto_box_seal

(PHP 7 >= 7.2.0, PHP 8)

sodium_crypto_box_sealCriptografia de chave pública anônima

Descrição

sodium_crypto_box_seal(#[\SensitiveParameter] string $message, string $public_key): string

Criptografa uma mensagem de modo que somente o destinatário possa decifrá-la.

Ao contrário de sodium_crypto_box(), você só precisa saber a chave pública do destinatário para usar sodium_crypto_box_seal(). Uma consequência dessa conveniência, no entanto, é que o texto cifrado não está vinculado a uma chave pública estática e, portanto, não é autenticado. Daí a criptografia de chave pública anônima.

sodium_crypto_box_seal() ainda fornece integridade de texto cifrado. Só não autenticação de identidade do remetente.

Se também for necessária autenticação do remetente, as funções sodium_crypto_sign() são provavelmente o melhor lugar para começar.

Parâmetros

message

A mensagem a criptografar.

public_key

A chave pública que corresponde à única chave que pode descriptografar a mensagem.

Valor Retornado

Uma sequência de texto cifrado no formato de (chave pública única, mensagem criptografada, tag de autenticação).

Exemplos

Exemplo #1 Exemplo de sodium_crypto_box_seal()

<?php
$keypair
= sodium_crypto_box_keypair();
$public_key = sodium_crypto_box_publickey($keypair);

// Texto simples ofuscado para tornar o exemplo mais divertido
$plaintext_b64 = "V3JpdGluZyBzb2Z0d2FyZSBpbiBQSFAgY2FuIGJlIGEgZGVsaWdodCE=";
$decoded_plaintext = sodium_base642bin($plaintext_b64, SODIUM_BASE64_VARIANT_ORIGINAL);

$sealed = sodium_crypto_box_seal($decoded_plaintext, $public_key);
var_dump(base64_encode($sealed));

$opened = sodium_crypto_box_seal_open($sealed, $keypair);
var_dump($opened);
?>

O exemplo acima produzirá algo semelhante a:

string(120) "oRBXXAV4iQBrxlV4A21Bord8Yo/D8ZlrIIGNyaRCcGBfpz0map52I3xq6l+CST+1NSgQkbV+HiYyFjXWiWiaCGupGf+zl4bgWj/A9Adtem7Jt3h3emrMsLw="
string(41) "Writing software in PHP can be a delight!"
adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
9
craig at craigfrancis dot co dot uk
7 years ago
Here's a quick example on how to use sodium_crypto_box_seal(); where you have 2 people exchanging a $message - person 1 encrypts it so that only person 2 can decrypt it. It does not allow person 2 to know who sent it, as only their public key way used (see sodium_crypto_box to do that).

<?php

$keypair
= sodium_crypto_box_keypair();
$keypair_public = sodium_crypto_box_publickey($keypair);
$keypair_secret = sodium_crypto_box_secretkey($keypair);

// $key_public = sodium_crypto_box_publickey_from_secretkey($keypair_secret);
// $keypair = sodium_crypto_box_keypair_from_secretkey_and_publickey($keypair_secret, $key_public);

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

$message = 'hello';

$encrypted = sodium_crypto_box_seal($message, $keypair_public);

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

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

$decrypted = sodium_crypto_box_seal_open($encrypted, $keypair);

echo
$decrypted . "\n";

?>
To Top