<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.openssl.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'function.openssl-seal.php',
    1 => 'openssl_seal',
    2 => 'Sella datos',
  ),
  'up' => 
  array (
    0 => 'ref.openssl.php',
    1 => 'Funciones de OpenSSL',
  ),
  'prev' => 
  array (
    0 => 'function.openssl-random-pseudo-bytes.php',
    1 => 'openssl_random_pseudo_bytes',
  ),
  'next' => 
  array (
    0 => 'function.openssl-sign.php',
    1 => 'openssl_sign',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/openssl/functions/openssl-seal.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.openssl-seal" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">openssl_seal</h1>
  <p class="verinfo">(PHP 4 &gt;= 4.0.4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">openssl_seal</span> &mdash; <span class="dc-title">Sella datos</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.openssl-seal-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>openssl_seal</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="attribute"><a href="class.sensitiveparameter.php">#[\SensitiveParameter]</a> </span><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$data</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter reference">&$sealed_data</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter reference">&$encrypted_keys</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="parameter">$public_key</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$cipher_algo</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter reference">&$iv</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span><br>): <span class="type"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span>|<span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span></div>

  <p class="para rdfs-comment">
   La <span class="function"><strong>openssl_seal()</strong></span> sella (cifra) <code class="parameter">data</code> utilizando el
   <code class="parameter">cipher_algo</code> especificado con una clave secreta generada aleatoriamente. La clave es
   posteriormente cifrada con cada una de las claves públicas en el array <code class="parameter">public_key</code>,
   y cada clave de envoltura cifrada es devuelta en <code class="parameter">encrypted_keys</code>. Esto permite
   enviar datos sellados a múltiples destinatarios (siempre que sus claves públicas estén disponibles).
   Cada destinatario debe recibir tanto los datos sellados como la clave de envoltura que ha sido cifrada con
   la clave pública del destinatario. El IV (vector de inicialización) es generado, y su valor es devuelto en
   <code class="parameter">iv</code>.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.openssl-seal-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">data</code></dt>
     <dd>
      <p class="para">
       Los datos a sellar
      </p>
     </dd>
    
    
     <dt><code class="parameter">sealed_data</code></dt>
     <dd>
      <p class="para">
       Los datos sellados.
      </p>
     </dd>
    
    
     <dt><code class="parameter">encrypted_keys</code></dt>
     <dd>
      <p class="para">
       Array de claves cifradas.
      </p>
     </dd>
    
    
     <dt><code class="parameter">public_key</code></dt>
     <dd>
      <p class="para">
       Array de instancias <span class="classname"><a href="class.opensslasymmetrickey.php" class="classname">OpenSSLAsymmetricKey</a></span>
       que contienen las claves públicas.
      </p>
     </dd>
    
    
     <dt><code class="parameter">cipher_algo</code></dt>
     <dd>
      <p class="para">
       El método de cifrado.
       <div class="caution"><strong class="caution">Precaución</strong>
        <p class="simpara">
         El valor por omisión para versiones de PHP anteriores a 8.0 es (<code class="literal">&#039;RC4&#039;</code>), que se
         considera no segura. Se recomienda encarecidamente especificar explícitamente un método de cifrado
         seguro.
        </p>
       </div>
      </p>
     </dd>
    
    
     <dt><code class="parameter">iv</code></dt>
     <dd>
      <p class="para">
       El vector de inicialización para el descifrado de <code class="parameter">data</code>. Es requerido si
       el método de cifrado necesita un IV. Esto puede ser determinado llamando a
       <span class="function"><a href="function.openssl-cipher-iv-length.php" class="function">openssl_cipher_iv_length()</a></span> con <code class="parameter">cipher_algo</code>.
      </p>
      <div class="caution"><strong class="caution">Precaución</strong>
       <p class="simpara">
        El IV no puede ser definido explícitamente. Cualquier valor que se le asigne es sobrescrito por un valor
        generado aleatoriamente.
       </p>
      </div>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.openssl-seal-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   Devuelve la longitud de los datos
   sellados en caso de éxito, y <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> en caso contrario.
   En caso de éxito, los datos sellados son
   colocados en el parámetro <code class="parameter">sealed_data</code>,
   y las claves de envoltura en <code class="parameter">encrypted_keys</code>.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.openssl-seal-changelog">
  <h3 class="title">Historial de cambios</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Versión</th>
      <th>Descripción</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.0.0</td>
      <td>
       <code class="parameter">public_key</code> ahora acepta un <span class="type"><a href="language.types.array.php" class="type array">array</a></span>
       de instancias de <span class="classname"><a href="class.opensslasymmetrickey.php" class="classname">OpenSSLAsymmetricKey</a></span>;
       anteriormente, se aceptaba un <span class="type"><a href="language.types.array.php" class="type array">array</a></span> de <span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>s de tipo <code class="literal">OpenSSL key</code>.
      </td>
     </tr>

     <tr>
      <td>8.0.0</td>
      <td>
       <code class="parameter">cipher_algo</code> ya no es un parámetro opcional.
      </td>
     </tr>

     <tr>
      <td>8.0.0</td>
      <td>
       <code class="parameter">iv</code> ahora es nullable.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.openssl-seal-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 Ejemplo con <span class="function"><strong>openssl_seal()</strong></span></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$data </span><span style="color: #007700">= </span><span style="color: #DD0000">"test"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// obtener las claves públicas<br /></span><span style="color: #0000BB">$pk1 </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_get_publickey</span><span style="color: #007700">(</span><span style="color: #DD0000">"file://cert1.pem"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$pk2 </span><span style="color: #007700">= </span><span style="color: #0000BB">openssl_get_publickey</span><span style="color: #007700">(</span><span style="color: #DD0000">"file://cert2.pem"</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">// sella el mensaje: solo los poseedores de $pk1 y $pk2 pueden descifrar<br />// el mensaje $sealed con las claves $ekeys[0] y $ekeys[1] (respectivamente).<br /></span><span style="color: #0000BB">openssl_seal</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">, </span><span style="color: #0000BB">$sealed</span><span style="color: #007700">, </span><span style="color: #0000BB">$ekeys</span><span style="color: #007700">, array(</span><span style="color: #0000BB">$pk1</span><span style="color: #007700">, </span><span style="color: #0000BB">$pk2</span><span style="color: #007700">));<br /><br />if (</span><span style="color: #0000BB">openssl_seal</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">, </span><span style="color: #0000BB">$sealed</span><span style="color: #007700">, </span><span style="color: #0000BB">$ekeys</span><span style="color: #007700">, array(</span><span style="color: #0000BB">$pk1</span><span style="color: #007700">, </span><span style="color: #0000BB">$pk2</span><span style="color: #007700">), </span><span style="color: #DD0000">'AES256'</span><span style="color: #007700">, </span><span style="color: #0000BB">$iv</span><span style="color: #007700">) &gt; </span><span style="color: #0000BB">0</span><span style="color: #007700">) {<br />    </span><span style="color: #FF8000">// posiblemente almacenar los valores $sealed y $iv y utilizarlos más tarde en openssl_open<br />    </span><span style="color: #007700">echo </span><span style="color: #DD0000">"éxito\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.openssl-seal-seealso">
  <h3 class="title">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.openssl-open.php" class="function" rel="rdfs-seeAlso">openssl_open()</a> - Abre datos sellados</span></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>