(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
openssl_pkcs7_encrypt — Cifra un mensaje S/MIME
$input_filename,$output_filename,$certificate,$headers,$flags = 0,$cipher_algo = OPENSSL_CIPHER_AES_128_CBC
openssl_pkcs7_encrypt() toma el contenido del fichero
input_filename y lo cifra utilizando un
cifrado RC2 de 40 bits, de manera que el mensaje solo pueda
ser leído por el poseedor de certificate.
input_filename
output_filename
certificatePuede ser un certificado X.509 o un array de certificados X.509.
headers
headers es un array de encabezados que serán
añadidos al inicio del mensaje, una vez que los datos hayan sido
cifrados.
headers puede ser un array asociativo, donde
las claves son los nombres de los encabezados, o bien un array indexado donde cada
línea contiene un encabezado completo.
flags
flags puede ser utilizado para especificar
opciones que afectarán al cifrado (ver las
constantes PKCS7).
cipher_algoUna de las constantes cipher.
| Versión | Descripción |
|---|---|
| 8.1.0 |
El algoritmo de cifrado por omisión (cipher_algo)
es ahora AES-128-CBC (OPENSSL_CIPHER_AES_128_CBC).
Anteriormente, se utilizaba PKCS7/CMS (OPENSSL_CIPHER_RC2_40).
|
| 8.0.0 |
certificate acepta ahora una instancia de
OpenSSLCertificate;
anteriormente, se aceptaba un resource de tipo OpenSSL X.509 CSR.
|
Ejemplo #1 Ejemplo con openssl_pkcs7_encrypt()
<?php
// el mensaje que se desea cifrar y enviar a su agente secreto
// en misión, llamado "nighthawk". Tiene su certificado
// en el fichero "nighthawk.pem"
$data = <<<EOD
Nighthawk,
Top secret, solo para sus ojos !
El enemigo se acerca! Reúnase en el café a las 8:30,
para su pasaporte falso.
HQ
EOD;
// Carga de la clave
$key = file_get_contents("nighthawk.pem");
// Guardado del mensaje en un fichero
$fp = fopen("msg.txt", "w");
fwrite($fp, $data);
fclose($fp);
// Cifrado del mensaje
if (openssl_pkcs7_encrypt("msg.txt", "enc.txt", $key,
array("To" => "nighthawk@example.com", // sintaxis en forma de clave
"From: HQ <hq@example.com>", // sintaxis en forma de índice
"Subject" => "Solo para sus ojos !"))) {
// mensaje cifrado - envíelo !
exec(ini_get("sendmail_path") . " < enc.txt");
}
?>