• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • openssl_pkcs7_decrypt()

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

    解密一个 S/MIME 加密的消息

    说明

    openssl_pkcs7_decrypt(string $infilename,string $outfilename, mixed $recipcert[,mixed $recipkey]): bool

    使用由$recipcert$recipkey指定的证书和与之关联的私钥解密$infilename文件中包含的 S/MIME 加密消息

    参数

    $infilename
    $outfilename

    解密的消息将被存入的文件中,以$outfilename命名。

    $recipcert
    $recipkey

    返回值

    成功时返回TRUE,或者在失败时返回FALSE

    范例

    openssl_pkcs7_decrypt()范例

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