|
1 | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | 2 | <!-- $Revision$ --> |
3 | | -<!-- EN-Revision: 5bc68add3da3cd18c40f851e944b15095d3a26aa Maintainer: hirokawa Status: ready --> |
| 3 | +<!-- EN-Revision: 730fd5c3dd1523bb9330762084ce016d4e58e946 Maintainer: hirokawa Status: ready --> |
4 | 4 | <!-- CREDITS: takagi,mumumu --> |
5 | 5 | <refentry xml:id="function.openssl-open" xmlns="http://docbook.org/ns/docbook"> |
6 | 6 | <refnamediv> |
|
20 | 20 | <methodparam choice="opt"><type class="union"><type>string</type><type>null</type></type><parameter>iv</parameter><initializer>&null;</initializer></methodparam> |
21 | 21 | </methodsynopsis> |
22 | 22 | <para> |
23 | | - <function>openssl_open</function> は、キー ID |
24 | | - <parameter>private_key</parameter> およびエンベロープキー |
25 | | - <parameter>encrypted_key</parameter> に関連する公開鍵を使用して、 |
| 23 | + <function>openssl_open</function> は、 <parameter>private_key</parameter> を使用して |
| 24 | + <parameter>encrypted_key</parameter> から復号されたエンベロープキーによって |
26 | 25 | <parameter>data</parameter> をオープン(復号)します。 |
27 | | - その上で、<parameter>output</parameter> を復号化したデータで埋めます。 |
28 | | - エンベロープキーは、データがシール(暗号化)された際に生成され、特定の |
29 | | - 一つの公開鍵でのみ使用することが可能です。詳細な情報については、 |
30 | | - <function>openssl_seal</function> を参照ください。 |
| 26 | + 復号は <parameter>cipher_algo</parameter> と <parameter>iv</parameter> を使用して行なわれます。 |
| 27 | + IV は暗号方式が要求する場合にのみ必要です。復号されたデータは <parameter>output</parameter> に |
| 28 | + 格納されます。エンベロープキーは通常、秘密鍵に関連付けられた公開鍵を用いてデータがシール(暗号化) |
| 29 | + されたときに生成されます。 |
| 30 | + 詳細は <function>openssl_seal</function> を参照ください。 |
31 | 31 | </para> |
32 | 32 | </refsect1> |
33 | 33 |
|
|
39 | 39 | <term><parameter>data</parameter></term> |
40 | 40 | <listitem> |
41 | 41 | <para> |
| 42 | + シール(暗号化)されたデータ。 |
42 | 43 | </para> |
43 | 44 | </listitem> |
44 | 45 | </varlistentry> |
45 | 46 | <varlistentry> |
46 | 47 | <term><parameter>output</parameter></term> |
47 | 48 | <listitem> |
48 | 49 | <para> |
49 | | - 成功した場合、オープンしたデータをここに返します。 |
| 50 | + 成功した場合、オープンしたデータをこのパラメータのリファレンス変数として返します。 |
50 | 51 | </para> |
51 | 52 | </listitem> |
52 | 53 | </varlistentry> |
53 | 54 | <varlistentry> |
54 | 55 | <term><parameter>encrypted_key</parameter></term> |
55 | 56 | <listitem> |
56 | 57 | <para> |
| 58 | + <parameter>private_key</parameter> を用いて復号できる暗号化された対称鍵。 |
57 | 59 | </para> |
58 | 60 | </listitem> |
59 | 61 | </varlistentry> |
60 | 62 | <varlistentry> |
61 | 63 | <term><parameter>private_key</parameter></term> |
62 | 64 | <listitem> |
63 | 65 | <para> |
| 66 | + <parameter>encrypted_key</parameter>の復号に用いられる秘密鍵。 |
64 | 67 | </para> |
65 | 68 | </listitem> |
66 | 69 | </varlistentry> |
67 | 70 | <varlistentry> |
68 | 71 | <term><parameter>cipher_algo</parameter></term> |
69 | 72 | <listitem> |
70 | 73 | <para> |
71 | | - 暗号化方式 |
| 74 | + <parameter>data</parameter>の復号に使用される暗号化方式。 |
72 | 75 | <caution> |
73 | 76 | <simpara> |
74 | | - デフォルト値 (<literal>'RC4'</literal>) はセキュアでない値です。 |
| 77 | + PHP 8.0 以前のデフォルト値 (<literal>'RC4'</literal>) は安全ではありません。 |
75 | 78 | 明示的にセキュアな暗号化方式を指定することを強く推奨します。 |
76 | 79 | </simpara> |
77 | 80 | </caution> |
|
82 | 85 | <term><parameter>iv</parameter></term> |
83 | 86 | <listitem> |
84 | 87 | <para> |
85 | | - 初期化ベクトル。 |
| 88 | + データの復号に用いられる初期化ベクトル。暗号方式が IV を要求する場合に必要です。 |
| 89 | + これは <parameter>cipher_algo</parameter> で <function>openssl_cipher_iv_length</function> |
| 90 | + を呼び出すことで確認できます。 |
86 | 91 | </para> |
87 | 92 | </listitem> |
88 | 93 | </varlistentry> |
|
139 | 144 | <programlisting role="php"> |
140 | 145 | <![CDATA[ |
141 | 146 | <?php |
142 | | -// $sealed および $env_key に暗号化されたデータおよびエンベロープキー |
143 | | -// が含まれていると仮定。共にシール元(暗号化側)から与えられる。 |
144 | 147 |
|
145 | | -// ファイルから公開鍵を取得し、使用可能とする |
146 | | -$fp = fopen("/src/openssl-0.9.6/demos/sign/key.pem", "r"); |
147 | | -$priv_key = fread($fp, 8192); |
148 | | -fclose($fp); |
149 | | -$pkeyid = openssl_get_privatekey($priv_key); |
| 148 | +// $sealed, $env_key および $iv に暗号化されたデータおよびエンベロープキーと |
| 149 | +// IV が含まれていると仮定。すべてシール元(暗号化側)から与えられる。 |
| 150 | +
|
| 151 | +// private_key.pem に置かれたファイルから公開鍵を取得する |
| 152 | +$pkey = openssl_get_privatekey("file://private_key.pem"); |
150 | 153 |
|
151 | 154 | // データを復号化し、$open に保存 |
152 | | -if (openssl_open($sealed, $open, $env_key, $pkeyid)) { |
153 | | - echo "here is the opened data: ", $open; |
| 155 | +if (openssl_open($sealed, $open, $env_key, $pkey, 'AES256', $iv)) { |
| 156 | + echo "Here is the opened data: ", $open; |
154 | 157 | } else { |
155 | | - echo "failed to open data"; |
| 158 | + echo "Failed to open data"; |
156 | 159 | } |
157 | | -
|
158 | | -// 公開鍵をメモリから開放 |
159 | | -openssl_free_key($pkeyid); |
160 | 160 | ?> |
161 | 161 | ]]> |
162 | 162 | </programlisting> |
|
0 commit comments