openssl_pkcs7_decrypt

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

openssl_pkcs7_decrypt解密 S/MIME 加密的消息

说明

openssl_pkcs7_decrypt(
    string $input_filename,
    string $output_filename,
    #[\SensitiveParameter] OpenSSLCertificate|string $certificate,
    #[\SensitiveParameter] OpenSSLAsymmetricKey|OpenSSLCertificate|array|string|null $private_key = null
): bool

使用由 certificateprivate_key 指定的证书及其关联的私钥来解密 input_filename 指定的文件中包含的 S/MIME 加密的消息。

参数

input_filename

output_filename

解密后的消息将写入由 output_filename 指定的文件。

certificate

private_key

返回值

成功时返回 true,失败时返回 false

变更日志

版本 说明
8.0.0 private_key 现在接受 OpenSSLAsymmetricKeyOpenSSLCertificate 实例;以前,接受类型为 OpenSSL keyOpenSSL X.509 CSR资源

示例

示例 #1 openssl_pkcs7_decrypt() 示例

<?php
// 假设 $cert 和 $key 包含您的个人证书和私钥对,并且您是 S/MIME 消息的接收者
$infilename = "encrypted.msg"; // 此文件保存您的加密消息
$outfilename = "decrypted.msg"; // 确保您可以写入此文件

if (openssl_pkcs7_decrypt($infilename, $outfilename, $cert, $key)) {
echo
"解密成功!";
} else {
echo
"解密失败!";
}
?>

添加注释

用户贡献的注释 1 个注释

oliver at anonsphere dot com
13 年前
如果您想解密收到的电子邮件,请记住您需要完整的加密消息,包括 mime 头。

<?php

// 获取完整消息
$encrypted = imap_fetchmime($stream, $msg_number, "1", FT_UID);
$encrypted .= imap_fetchbody($stream, $msg_number, "1", FT_UID);

// 编写所需的临时文件
$infile = tempnam("", "enc");
file_put_contents($infile, $encrypted);
$outfile = tempnam("", "dec");

// 证书内容
$public = file_get_contents("/path/to/your/cert.pem");
$private = array(file_get_contents("/path/to/your/cert.pem"), "password");

// 准备好?开始!
if(openssl_pkcs7_decrypt($infile, $outfile, $public, $private))
{
// 解密成功
echo file_get_contents($outfile);
}
else
{
// 解密失败
echo "哎呀!解密失败!";
}

// 删除临时文件
@unlink($infile);
@
unlink($outfile);

?>
To Top