openssl_seal

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

openssl_sealSela (criptografa) dados

Descrição

openssl_seal(
    #[\SensitiveParameter] string $data,
    string &$sealed_data,
    array &$encrypted_keys,
    array $public_key,
    string $cipher_algo,
    string &$iv = null
): int|false

openssl_seal() sela (criptografa) os dados de data usando o algoritmo de criptografia cipher_algo com uma chave secreta gerada aleatoriamente. A chave é então criptografada com cada uma das chaves públicas no array public_key, e cada chave de envelope criptografada é retornada em encrypted_keys. Isso permite que dados selados sejam enviados a vários destinatários (desde que suas chaves públicas estejam disponíveis). Cada destinatário deve receber os dados selados e a chave do envelope que foi criptografada com a chave pública do destinatário. O IV (Vetor de Inicialização) é gerado e seu valor é retornado em iv.

Parâmetros

data

Os dados a serem selados.

sealed_data

Os dados selados.

encrypted_keys

Array de chaves criptografadas.

public_key

Array de instâncias de OpenSSLAsymmetricKey contendo chaves públicas.

cipher_algo

O método de criptografia.

Cuidado

O valor padrão para versões do PHP anteriores a 8.0 é ('RC4') que é considerado inseguro. É altamente recomendável especificar explicitamente um método de criptografia seguro.

iv

O vetor de inicialização para descriptografia de data. É necessário se o método de criptografia exigir IV. Isso pode ser descoberto chamando openssl_cipher_iv_length() com cipher_algo.

Cuidado

O IV não pode ser definido explicitamente. Qualquer valor definido nele é substituído por um valor gerado aleatoriamente.

Valor Retornado

Retorna o comprimento dos dados selados em caso de sucesso ou false em caso de erro. Se for bem-sucedido, os dados selados serão retornados em sealed_data e as chaves do envelope em encrypted_keys.

Registro de Alterações

Versão Descrição
8.0.0 public_key agora aceita um array de instâncias de OpenSSLAsymmetricKey; anteriormente, um array de resources do tipo OpenSSL key era aceito.
8.0.0 cipher_algo não é mais um parâmetro opcional.
8.0.0 iv agora pode ser nulo.

Exemplos

Exemplo #1 Exemplo de openssl_seal()

<?php
// Presume-se que $data contenha os dados a serem selados
$data = "test";

// busca chaves públicas
$pk1 = openssl_get_publickey("file://cert1.pem");
$pk2 = openssl_get_publickey("file://cert2.pem");

// sela a mensagem, apenas os proprietários de $pk1 e $pk2 podem descriptografar $sealed com as chaves
// $ekeys[0] e $ekeys[1] respectivamente.
if (openssl_seal($data, $sealed, $ekeys, array($pk1, $pk2), 'AES256', $iv) > 0) {
// possivelmente armazena os valores $sealed e $iv e usa mais tarde em openssl_open
echo "sucesso\n";
}
?>

Veja Também