<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >openssl_seal</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PHP 手册" HREF="index.html"><LINK REL="UP" TITLE="OpenSSL Functions" HREF="ref.openssl.html"><LINK REL="PREVIOUS" TITLE="openssl_public_encrypt" HREF="function.openssl-public-encrypt.html"><LINK REL="NEXT" TITLE="openssl_sign" HREF="function.openssl-sign.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="refentry" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PHP 手册</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="function.openssl-public-encrypt.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="function.openssl-sign.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><H1 ><A NAME="function.openssl-seal" ></A >openssl_seal</H1 ><DIV CLASS="refnamediv" ><A NAME="AEN164420" ></A ><P > (PHP 4 >= 4.0.4, PHP 5)</P >openssl_seal -- Seal (encrypt) data</DIV ><DIV CLASS="refsect1" ><A NAME="AEN164423" ></A ><H2 >Description</H2 >int <B CLASS="methodname" >openssl_seal</B > ( string data, string &sealed_data, array &env_keys, array pub_key_ids )<BR ></BR ><P > Returns the length of the sealed data on success, or <TT CLASS="constant" ><B >FALSE</B ></TT > on error. If successful the sealed data is returned in <CODE CLASS="parameter" >sealed_data</CODE >, and the envelope keys in <CODE CLASS="parameter" >env_keys</CODE >. </P ><P > <B CLASS="function" >openssl_seal()</B > seals (encrypts) <CODE CLASS="parameter" >data</CODE > by using RC4 with a randomly generated secret key. The key is encrypted with each of the public keys associated with the identifiers in <CODE CLASS="parameter" >pub_key_ids</CODE > and each encrypted key is returned in <CODE CLASS="parameter" >env_keys</CODE >. This means that one can send sealed data to multiple recipients (provided one has obtained their public keys). Each recipient must receive both the sealed data and the envelope key that was encrypted with the recipient's public key. </P ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN164450" ></A ><P ><B >例 1. <B CLASS="function" >openssl_seal()</B > example</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// $data is assumed to contain the data to be sealed<br /><br />// fetch public keys for our recipients, and ready them<br /></font><font color="#0000BB">$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"/src/openssl-0.9.6/demos/maurice/cert.pem"</font><font color="#007700">, </font><font color="#DD0000">"r"</font><font color="#007700">);<br /></font><font color="#0000BB">$cert </font><font color="#007700">= </font><font color="#0000BB">fread</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">8192</font><font color="#007700">);<br /></font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">);<br /></font><font color="#0000BB">$pk1 </font><font color="#007700">= </font><font color="#0000BB">openssl_get_publickey</font><font color="#007700">(</font><font color="#0000BB">$cert</font><font color="#007700">);<br /></font><font color="#FF8000">// Repeat for second recipient<br /></font><font color="#0000BB">$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"/src/openssl-0.9.6/demos/sign/cert.pem"</font><font color="#007700">, </font><font color="#DD0000">"r"</font><font color="#007700">);<br /></font><font color="#0000BB">$cert </font><font color="#007700">= </font><font color="#0000BB">fread</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">8192</font><font color="#007700">);<br /></font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">);<br /></font><font color="#0000BB">$pk2 </font><font color="#007700">= </font><font color="#0000BB">openssl_get_publickey</font><font color="#007700">(</font><font color="#0000BB">$cert</font><font color="#007700">);<br /><br /></font><font color="#FF8000">// seal message, only owners of $pk1 and $pk2 can decrypt $sealed with keys<br />// $ekeys[0] and $ekeys[1] respectively.<br /></font><font color="#0000BB">openssl_seal</font><font color="#007700">(</font><font color="#0000BB">$data</font><font color="#007700">, </font><font color="#0000BB">$sealed</font><font color="#007700">, </font><font color="#0000BB">$ekeys</font><font color="#007700">, array(</font><font color="#0000BB">$pk1</font><font color="#007700">, </font><font color="#0000BB">$pk2</font><font color="#007700">));<br /><br /></font><font color="#FF8000">// free the keys from memory<br /></font><font color="#0000BB">openssl_free_key</font><font color="#007700">(</font><font color="#0000BB">$pk1</font><font color="#007700">);<br /></font><font color="#0000BB">openssl_free_key</font><font color="#007700">(</font><font color="#0000BB">$pk2</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><P > See also <A HREF="function.openssl-open.html" ><B CLASS="function" >openssl_open()</B ></A >. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="function.openssl-public-encrypt.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >起始页</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="function.openssl-sign.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >openssl_public_encrypt</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="ref.openssl.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >openssl_sign</TD ></TR ></TABLE ></DIV ></BODY ></HTML >