更新:ハッシュ関数を使用するだけでは、パスワードを保存するのに十分な強度はありません。 このスレッドのGillesからの回答 を読む必要があります 詳細な説明については。
パスワードには、BcryptやArgon2iなどのキー強化ハッシュアルゴリズムを使用します。たとえば、PHPでは、 password_hash()関数> 、デフォルトでBcryptを使用します。
$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
結果は、次のような60文字の文字列になります(ただし、一意のソルトが生成されるため、数字は異なります)。
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
SQLデータ型CHAR(60)
を使用します Bcryptハッシュのこのエンコーディングを保存します。この関数は16進数の文字列としてエンコードされないため、16進数を簡単に解除してバイナリに格納することはできません。
他のハッシュ関数にはまだ用途がありますが、パスワードを保存するためのものではないため、2008年に作成された元の回答を以下に残しておきます。
使用するハッシュアルゴリズムによって異なります。ハッシュは、入力に関係なく、常に同じ長さの結果を生成します。バイナリハッシュの結果を一連の16進数としてテキストで表すのが一般的です。または、 UNHEX()
16進数の文字列を半分に減らす関数。
- MD5は128ビットのハッシュ値を生成します。 CHAR(32)またはBINARY(16)を使用できます
- SHA-1は160ビットのハッシュ値を生成します。 CHAR(40)またはBINARY(20)を使用できます
- SHA-224は224ビットのハッシュ値を生成します。 CHAR(56)またはBINARY(28)を使用できます
- SHA-256は、256ビットのハッシュ値を生成します。 CHAR(64)またはBINARY(32)を使用できます
- SHA-384は、384ビットのハッシュ値を生成します。 CHAR(96)またはBINARY(48)を使用できます
- SHA-512は512ビットのハッシュ値を生成します。 CHAR(128)またはBINARY(64)を使用できます
- BCryptは、実装に依存する448ビットのハッシュ値を生成します。 あなたCHAR(56)、CHAR(60)、CHAR(76)、BINARY(56)、またはBINARY(60)が必要な場合があります
2015年現在、NIST SHA-256またはより高い 相互運用性を必要とするハッシュ関数のアプリケーション用。ただし、NISTは、パスワードを安全に保存するためにこれらの単純なハッシュ関数を使用することを推奨していません。
より少ないハッシュアルゴリズムには用途がありますが(交換用ではなく、アプリケーションの内部など)、クラック可能であることが知られている 。