openssl_pkcs7_encrypt

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

openssl_pkcs7_encryptCifra un mensaje S/MIME

Descripción

openssl_pkcs7_encrypt(
    string $input_filename,
    string $output_filename,
    OpenSSLCertificate|array|string $certificate,
    ?array $headers,
    int $flags = 0,
    int $cipher_algo = OPENSSL_CIPHER_AES_128_CBC
): bool

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.

Parámetros

input_filename

output_filename

certificate

Puede 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_algo

Una de las constantes cipher.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Historial de cambios

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 recurso de tipo OpenSSL X.509 CSR.

Ejemplos

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");
}
?>