Ejemplo openssl_pkcs7_encrypt y openssl_pkcs7_decrypt

Ejemplo 1

Descripción

Este ejemplo usa la función openssl_pkcs7_encrypt para cifrar el contenido de un archivo de texto, mostrando el correspondiente mensaje S/MIME obtenido y a continuación, mediante la clave privada asociada, descifrarlo con la función openssl_pkcs7_decrypt. Para que este programa funcione correctamente antes es preciso generar un certificado X509, almacenándolo, junto con la clave privada saociada, en el camino que puede verse en el propio código.

pkcscifra.png

Código

<?php
  // Se lee el certificado del destinatario del mensaje
  $Cert = openssl_x509_read('file://tmp/certx509.pem');
 
  // y se usa para cifrar el contenido del archivo mensaje.txt
  openssl_pkcs7_encrypt('tmp/mensaje.txt','tmp/cifrado.txt',$Cert,
       array('To' => 'francisco.charte@gmail.com'));
 
  // Se recupera el mensaje original y el cifrado para mostrarlos
  $Mensaje = file_get_contents('tmp/mensaje.txt');
  $Cifrado = file_get_contents('tmp/cifrado.txt');
?>
 
<h3>Mensaje original</h3>
<p><?= $Mensaje ?></p>
<h3>Mensaje cifrado</h3>
<textarea cols='70' rows='15'><?= $Cifrado ?></textarea>
 
<?php
  // Se obtiene la clave privada asociada al certificado
  $Clave = openssl_pkey_get_private('file://tmp/privada.pem','micontrasena');
 
  // y se usa para descifrar el mensaje recibido
  openssl_pkcs7_decrypt('tmp/cifrado.txt','tmp/descifrado.txt',$Cert,$Clave);
 
  // Liberación del certificado y la clave
  openssl_x509_free($Cert);
  openssl_pkey_free($Clave);
 
  // Se lee el mensaje descifrado para mostrarlo
  $Descifrado = file_get_contents('tmp/descifrado.txt');
?>
 
<h3>Mensaje descifrado</h3>
<p><?= $Descifrado ?></p>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License