Gera assinatura

# openssl_sign

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

openssl_sign — Gera assinatura

### Descrição

function openssl_sign(
string `$data`,
string `&$signature`,
#[\SensitiveParameter]OpenSSLAsymmetricKey|OpenSSLCertificate|array|string `$private_key`,
string|int `$algorithm` = `OPENSSL_ALGO_SHA1`,
int `$padding` = 0
): bool

openssl_sign() calcula uma assinatura para os dados informados em `data` gerando uma assinatura digital criptográfica usando a chave privada associada a `private_key`. Observe que os dados em si não são criptografados.

### Parâmetros

`data`

  A string de dados a ser assinada.

`signature`

  Se a chamada for bem-sucedida, a assinatura será retornada em `signature`.

`private_key`

  OpenSSLAsymmetricKey - uma chave, retornada por openssl_get_privatekey()

  string - uma chave no formato PEM

`algorithm`

  int - um destes Algoritmos de Assinatura.

  string - uma string válida retornada por openssl_get_md_methods(), por exemplo, "sha256WithRSAEncryption" ou "sha384".

`padding`
  Preenchimento PSS RSA a ser usado.

### Valor Retornado

Retorna `true` em caso de sucesso ou `false` em caso de falha.

### Registro de Alterações

Versão | Descrição
--- | ---
8.5.0 | O parâmetro opcional `padding` foi adicionado.
8.0.0 | `private_key` agora aceita uma instância de OpenSSLAsymmetricKey ou OpenSSLCertificate; anteriormente, um resource do tipo `OpenSSL key` ou `OpenSSL X.509` era aceito.

### Exemplos

Exemplo #1 Exemplo de openssl_sign()

    <?php
    // Presume-se que $data contenha os dados a serem assinados

    // busca a chave privada do arquivo e a prepara
    $pkeyid = openssl_pkey_get_private("file://src/openssl-0.9.6/demos/sign/key.pem");

    // calcula assinatura
    openssl_sign($data, $signature, $pkeyid);

    // libera a chave da memória
    openssl_free_key($pkeyid);
    ?>

Exemplo #2 Exemplo de openssl_sign()

    <?php
    // dados a serem assinados
    $data = 'my data';

    // cria nova chave pública e privada
    $new_key_pair = openssl_pkey_new(array(
        "private_key_bits" => 2048,
        "private_key_type" => OPENSSL_KEYTYPE_RSA,
    ));
    openssl_pkey_export($new_key_pair, $private_key_pem);

    $details = openssl_pkey_get_details($new_key_pair);
    $public_key_pem = $details['key'];

    // cria assinatura
    openssl_sign($data, $signature, $private_key_pem, OPENSSL_ALGO_SHA256);

    // grava para mais tarde
    file_put_contents('private_key.pem', $private_key_pem);
    file_put_contents('public_key.pem', $public_key_pem);
    file_put_contents('signature.dat', $signature);

    // verifica assinatura
    $r = openssl_verify($data, $signature, $public_key_pem, "sha256WithRSAEncryption");
    var_dump($r);
    ?>

### Veja Também

- openssl_verify() - Verifica assinatura

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open