The crypt_gensalt function (from the xpass extension) makes usage of this function much easier, ex:
<?php
$salt = crypt_gensalt(CRYPT_PREFIX_BLOWFISH, 10);
$hash = crypt($secret, $salt);(PHP 4, PHP 5, PHP 7, PHP 8)
crypt — 文字列の一方向のハッシュ化を行う
この関数は (まだ)バイナリデータ対応ではありません!
crypt() 文字列のハッシュを返します。 Unix 標準の DES ベースのアルゴリズムか、 代替のアルゴリズムを使用します。 password_verify() は crypt() と互換性があるので、 crypt() が作ったパスワードハッシュは password_verify() でも使えます。
   PHP 8.0.0 より前のバージョンでは、salt
   パラメータは必須ではありませんでした。ただ、これを省略すると
   crypt()
   が作るハッシュが弱いものになってしまっていました。
   このパラメータを省略した場合には、E_NOTICE が発生していました。
   十分に強い salt を指定して、セキュリティを確保しましょう。
  
password_hash() は、強力なハッシュを使い、強力なソルトを生成して、それを複数回自動的に適用します。 password_hash() は crypt() のシンプルなラッパーであり、既存のパスワードハッシュと互換性があります。 password_hash() を使うことを推奨します。
   ハッシュ方式は、salt 引数によって決まります。
   salt を省略した場合は、標準の 2 文字 (DES) の salt を自動生成します。
   あるいは、MD5 crypt() が使えれば 12 文字 (MD5) の salt を自動生成します。
   PHP の定数 CRYPT_SALT_LENGTH には、
   ハッシュで使用できる salt の最大長が格納されています。
  
   標準の DES ベースの場合、crypt()
   は出力の最初の 2 文字を salt として使用します。また、
   string の最初の 8 文字しか使用しません。
   つまり、最初の 8 文字が同じである長い文字列は、
   同じ salt を使う限り同じ結果となります。
  
以下のハッシュ形式がサポートされています:
CRYPT_STD_DES - 標準の DES ベースのハッシュで、
       アルファベット "./0-9A-Za-z" からなる 2 文字の salt を使用するもの。
       salt として無効な文字を使うと crypt() は失敗します。
    
   CRYPT_EXT_DES - 拡張した DES ベースのハッシュ。
     "salt" は 9 文字で、
     アンダースコアの後に 4 文字の反復回数と 4 文字の salt が続きます。
     これらの4文字それぞれが、24ビットにエンコードされ、
     下位の文字から順に並びます。
     0 から 63 までの値は
     ./0-9A-Za-z の範囲内の文字でエンコードされます。
     salt に無効な文字を使うと crypt() は失敗します。
    
   CRYPT_MD5 - $1$ ではじまる 12 文字の salt を使用する MD5 ハッシュ。
    
   CRYPT_BLOWFISH - Blowfish ハッシュ。salt の形式は、
     "$2a$" か "$2x$" あるいは "$2y$"、2 桁のコストパラメータ、"$"、そして文字 "./0-9A-Za-z"
     からなる 22 文字となります。
     この範囲外の文字を salt に使うと、crypt() は長さゼロの文字列を返します。
     2 桁のコストパラメータは反復回数の 2 を底とする対数で、
     これは Blowfish ベースのハッシュアルゴリズムで使います。
     この値は 04 から 31 までの範囲でなければならず、
     それ以外の値の場合は crypt() は失敗します。
     "$2x$" ハッシュは潜在的に弱いハッシュです。
     "$2a$" ハッシュはこれと互換性があり、この弱点を軽減します。
     新しくハッシュを生成する場合は、"$2y$" を使うべきです。
    
   CRYPT_SHA256 - SHA-256 ハッシュに
     $5$ で始まる 16 文字の salt を組み合わせたもの。salt 文字列が
     'rounds=<N>$' で始まる場合は、数値 N がハッシュループの実行回数を表します。
     これは Blowfish のコストパラメータのようなものです。
     rounds のデフォルトは 5000 で、1000 から 999,999,999 までの値を指定できます。
     この範囲外の N を指定すると、近い方の境界値に切り詰められます。
    
   CRYPT_SHA512 - SHA-512 ハッシュに
     $6$ で始まる 16 文字の salt を組み合わせたもの。salt 文字列が
     'rounds=<N>$' で始まる場合は、数値 N がハッシュループの実行回数を表します。
     これは Blowfish のコストパラメータのようなものです。
     rounds のデフォルトは 5000 で、1000 から 999,999,999 までの値を指定できます。
     この範囲外の N を指定すると、近い方の境界値に切り詰められます。
    
   
stringハッシュしたい文字列。
        CRYPT_BLOWFISH を使うと、
        string が最大 72 バイトまでに切り詰められます。
       
saltハッシュのもととなる salt 文字列。省略した場合の挙動は アルゴリズムの実装によって決まるので、予期せぬ結果となることがあり得ます。
ハッシュした文字列を返します。 失敗した場合は、salt とは異なることが保証されている 13 文字未満の文字列を返します。
パスワードを検証するときの文字列比較関数は、 タイミング攻撃に対して脆弱ではないものでなければいけません。 これをもちいて、crypt() の出力と既知のハッシュとを比較します。 この比較を行うために、hash_equals() 関数が使えます。
| バージョン | 説明 | 
|---|---|
| 8.0.0 | saltは、オプションではなくなりました。 | 
例1 crypt() の例
<?php
$user_input = 'rasmuslerdorf';
$hashed_password = '$6$rounds=1000000$NJy4rIPjpOaU$0ACEYGg/aKCY3v8O8AfyiO7CTfZQ8/W231Qfh2tRLmfdvFD6XfHk12u6hMr9cYIA4hnpjLNSTRtUwYr9km9Ij/';
// PHP 以外のソフトウェアと互換性がある方法で、既存の crypt() ハッシュを検証します
if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) {
   echo "Password verified!";
}
?>注意: 復号するための関数はありません。 crypt() が使用しているのは単方向アルゴリズムだからです。
The crypt_gensalt function (from the xpass extension) makes usage of this function much easier, ex:
<?php
$salt = crypt_gensalt(CRYPT_PREFIX_BLOWFISH, 10);
$hash = crypt($secret, $salt);