PHP の出力の長さはcrypt()
?
md5()
出力は 128 ビットで、32 文字の文字列を生成するため、データベースではそれをchar(32)
列に入れcrypt()
ます。
注:そのように質問することは完全に制限されています。http://php.net/cryptを参照してください。
詳細:
crypt
ハッシュされた文字列または 13 文字より短く、失敗時にソルトと異なることが保証されている文字列を常に返します。例:
簡単なcrypt
呼び出しと、標準の DES ベースのハッシュに対する有効な 2 文字のソルトから簡単に始めましょう。
13 :: 2 (salt) + 11 (hash - 64 bits, base 64)
PHPcrypt
と特に MD5 (ここでは、md5crypt、MD5(Unix)、FreeBSD MD5、Cisco-IOS MD5、Hashcat モード 500 のほうが適切な名前) と空のソルトを使用する場合、出力の長さは次のようになります。
26 :: 3 (`$1$`) + 0 (empty salt) + 1 (`$`) + 22 (hash - 128 bits, base 64)
PHP のcrypt
デフォルトが前述の MD5 であり、ソルトを指定せずに呼び出されるシステムでは、ソルトcrypt
が生成されます。このソルトの長さは通常 8 文字です。出力の長さは次のとおりです。
34 :: 3 (`$1$`) + 8 (salt) + 1 (`$`) + 22 (hash)
この場合、データベース テーブルの列char(32)
は、使用しているデータベース サーバーに応じて、挿入または切り捨てでエラーを報告します。
しかし、MD5 の例は意味がありません。質問に記載されているため、私はそれを選びましたが、MD5 を使用しないでcrypt
ください (参照: Md5crypt パスワード スクランブラーは作成者によって安全と見なされなくなりました)。
代わりに、Blowfish ハッシュ ( CRYPT_BLOWFISH
) を見てみましょう。これには 2 桁のコストパラメータがあり、ソルトの長さは常に 22 です (より短いソルトが指定された場合は、$
s でパディングされます)。
60 :: 4 (`$2y$`) + 3 (cost `$`) + 22 (salt) + 1 (`$`) + 53 (hash)
Blowfish crypt ハッシュ アルゴリズム (bcrypt、OpenBSD Blowfish、Hashcat モード 3200) の場合、固定長は 60 です。
ご覧のとおり、出力の長さは、使用されているハッシュ アルゴリズム、ソルトの長さ、さらにはcostなどのハッシュ固有のパラメーターによって異なります。
たとえば、999 999 999 ラウンドと 16 バイト長のソルトで SHA512 を選択した場合、出力の長さは次のようになります。
123 :: 3 (`$6$`) + 17 (`rounds=999999999$`) + 16 (salt) + 1 (`$`) + 86 (hash)
この例は、画像を示すためだけに、少し極端かもしれません。
その他のcrypt
関連する質問:
ハッシュされた文字列、または 13 文字より短く、失敗時にソルトと異なることが保証されている文字列を返します。
crypt() は、標準の Unix DES ベースのアルゴリズムまたはシステムで利用可能な代替アルゴリズムを使用して、ハッシュされた文字列を返します。
一部のオペレーティング システムでは、複数の種類のハッシュがサポートされています。実際、標準の DES ベースのアルゴリズムが MD5 ベースのアルゴリズムに置き換えられることがあります。ハッシュ タイプは、salt 引数によってトリガーされます。5.3 より前のバージョンでは、PHP はシステムの crypt() に基づいて、インストール時に利用可能なアルゴリズムを決定していました。ソルトが指定されていない場合、MD5 crypt() の可用性に応じて、PHP は標準の 2 文字 (DES) ソルトまたは 12 文字 (MD5) のいずれかを自動生成します。PHP は、CRYPT_SALT_LENGTH という名前の定数を設定します。これは、使用可能なハッシュで許可される最長の有効なソルトを示します。
続きを読む: http://php.net/crypt
ドキュメントでわかるように、'''crypt()''' 関数はさまざまなハッシュ アルゴリズムで使用されます。したがって、長さは異なる場合があり、ドキュメントに記載されている定数によって決定されるデフォルトのハッシュ アルゴリズムに依存します。
crypt() は、利用可能な暗号化方法に依存しています。PHP の最も一般的な方法は、常に 32 文字を返す MD5 です。DES や Blowfish などの他のメソッドは、可変長の文字列を返します。
サーバーで crypt() 関数が使用しているメソッドを知る必要があります。