11<?xml version =" 1.0" encoding =" utf-8" ?>
22<!-- $Revision$ -->
3- <!-- EN-Revision: e302f07943465892db7f72469e2ce9b42c4f763f Maintainer: takagi Status: ready -->
3+ <!-- EN-Revision: 5003a6ea92eb50ac92121782eedfc5ad3fe9d061 Maintainer: takagi Status: ready -->
44<!-- Credits: mumumu -->
55<refentry xml : id =" function.password-hash" xmlns =" http://docbook.org/ns/docbook" xmlns : xlink =" http://www.w3.org/1999/xlink" >
66 <refnamediv >
3333 この定数もそれにあわせて変わっていきます。
3434 そのため、これを指定したときの結果の長さは、変わる可能性があります。
3535 したがって、結果をデータベースに格納するときにはカラム幅を
36- 60 文字以上にできるようなカラムを使うことをお勧めします
37- (255 文字くらいが適切でしょう )。
36+ 60 バイト以上にできるようなカラムを使うことをお勧めします
37+ (255 バイトくらいが適切でしょう )。
3838 </simpara >
3939 </listitem >
4040 <listitem >
4141 <simpara >
4242 <constant >PASSWORD_BCRYPT</constant > - bcrypt アルゴリズムを使ってハッシュを作ります。
4343 これは標準の <function >crypt</function >
4444 互換のハッシュで、識別子 <literal >$2y$</literal > を使った場合の結果を作ります。
45- その結果は、常に 60 文字の文字列になります。&return.falseforfailure; 。
4645 </simpara >
4746 </listitem >
4847 <listitem >
9190
9291 <para >
9392 省略した場合のデフォルトは <literal >12</literal > です。この値でもかまいませんが、
94- ハードウェアの性能に応じて調整することもできます 。
93+ ハードウェアの性能に応じて調整すべきです 。
9594 </para >
9695 </listitem >
9796 </itemizedlist >
265264 <programlisting role =" php" >
266265<![CDATA[
267266<?php
268- /**
269- * デフォルトのアルゴリズムを使ってパスワードをハッシュします。
270- * 現時点でのデフォルトは BCRYPT で、その結果は 60 文字になります。
271- *
272- * デフォルトは、今後変わる可能性があることに注意しましょう。結果が
273- * 60 文字以上になっても対応できるようにしておきましょう (255 あたりが適切です)
274- */
275267echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
276268?>
277269]]>
@@ -290,10 +282,8 @@ $2y$12$4Umg0rCJwMswRw/l.SwHvuQV01coP0eWmGzd61QH2RvAOMANUBGC.
290282 <programlisting role =" php" >
291283<![CDATA[
292284<?php
293- /**
294- * この例では、bcrypt のコストを上げて、13 にします。
295- */
296285$options = [
286+ // bcrypt のコストを 12 から 13 に増やします
297287 'cost' => 13,
298288];
299289echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
@@ -311,16 +301,21 @@ $2y$13$xeDfQumlmdm0Sco.4qmH1OGfUUmOcuRmfae0dPJhjX1Bq0yYhqbNi
311301 <para >
312302 <example >
313303 <title ><function >password_hash</function > で、適切なコストを探す例</title >
304+ <simpara >
305+ このコードは、サーバーをベンチマークして、
306+ ユーザー体験を悪化させることなく、
307+ どの程度のコストに耐えられるかを判断します。
308+ サーバーに負荷をかけすぎない範囲で、
309+ できるだけ高めのコストを設定することをお勧めします。
310+ 基準として 11 程度からはじめ、サーバーが十分に高速なら、
311+ できるだけ上げていきましょう。
312+ 以下のコードでは、
313+ ストレッチングの時間を 350 ミリ秒以内にすることを狙っています。
314+ 対話形式のログインを扱う際の許容時間としては、このあたりが適切でしょう。
315+ </simpara >
314316 <programlisting role =" php" >
315317<![CDATA[
316318<?php
317- /**
318- * このコードは、サーバーをベンチマークして、どの程度のコストに耐えられるかを判断します。
319- * サーバーに負荷をかけすぎない範囲で、できるだけ高めのコストを設定したいものです。
320- * 基準として 11 程度からはじめ、サーバーが十分に高速なら、できるだけ上げていきましょう。
321- * 以下のコードでは、ストレッチングの時間を 350 ミリ秒以内にすることを狙っています。
322- * 対話形式のログインを扱う際の許容時間としては、このあたりが適切でしょう。
323- */
324319$timeTarget = 0.350; // 350 ミリ秒
325320
326321$cost = 11;
331326 $end = microtime(true);
332327} while (($end - $start) < $timeTarget);
333328
334- echo "Appropriate Cost Found: " . $cost;
329+ echo "Appropriate Cost Found: " . $cost - 1 ;
335330?>
336331]]>
337332 </programlisting >
@@ -378,8 +373,8 @@ Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP
378373 <note >
379374 <para >
380375 実際にサーバー上でこの関数をテストして、コストパラメータの適切な設定値を調整することをお勧めします。
381- 対話型のシステムなら 、関数の実行時間が 350 ミリ秒くらいに収まるくらいが適切です。
382- 先ほどの例のスクリプトは、自分のハードウェア上での適切なコストを判断するための助けとなるでしょう 。
376+ 対話型のログインを行わせる場合 、関数の実行時間が 350 ミリ秒くらいに収まるくらいが適切です。
377+ 先ほどの例のスクリプトは、自分のハードウェア上での適切な bcrypt のコストを判断するための助けとなるでしょう 。
383378 </para >
384379 </note >
385380 <note >
0 commit comments