©
本文档使用
php中文网手册 发布
(PHP 4 >= 4.0.6, PHP 5)
openssl_pkcs7_decrypt — Decrypts an S/MIME encrypted message
$infilename
, string $outfilename
, mixed $recipcert
[, mixed $recipkey
] )
Decrypts the S/MIME encrypted message contained in the file specified by
infilename using the certificate and its
associated private key specified by recipcert and
recipkey.
infilename
outfilename
The decrypted message is written to the file specified by
outfilename.
recipcert
recipkey
成功时返回 TRUE , 或者在失败时返回 FALSE 。
Example #1 openssl_pkcs7_decrypt() example
<?php
// $cert and $key are assumed to contain your personal certificate and private
// key pair, and that you are the recipient of an S/MIME message
$infilename = "encrypted.msg" ; // this file holds your encrypted message
$outfilename = "decrypted.msg" ; // make sure you can write to this file
if ( openssl_pkcs7_decrypt ( $infilename , $outfilename , $cert , $key )) {
echo "decrypted!" ;
} else {
echo "failed to decrypt!" ;
}
?> [#1] oliver at anonsphere dot com [2011-04-28 21:16:11]
If you want to decrypt a received email, keep in mind that you need the full encrypted message including the mime header.
<?php
// Get the full message
$encrypted = imap_fetchmime($stream, $msg_number, "1", FT_UID);
$encrypted .= imap_fetchbody($stream, $msg_number, "1", FT_UID);
// Write the needed temporary files
$infile = tempnam("", "enc");
file_put_contents($infile, $encrypted);
$outfile = tempnam("", "dec");
// The certification stuff
$public = file_get_contents("/path/to/your/cert.pem");
$private = array(file_get_contents("/path/to/your/cert.pem"), "password");
// Ready? Go!
if(openssl_pkcs7_decrypt($infile, $outfile, $public, $private))
{
// Decryption successful
echo file_get_contents($outfile);
}
else
{
// Decryption failed
echo "Oh oh! Decryption failed!";
}
// Remove the temp files
@unlink($infile);
@unlink($outfile);
?>