web-dev-qa-db-ja.com

Bcryptデータのタイプと長さ?

パスワードのハッシュに次の library を使用しています。

_   string password = BCrypt.Net.BCrypt.HashPassword("stackoverflow");
_

長さはどうやら毎回60です。私の質問は、これらのパスワードをchar(60)として保存する必要がある場合は、データベースに保存する予定です。そうでない場合、何が良い習慣と見なされますか?

1
Black Panther

ハッシュアルゴリズムの出力の長さは、入力に依存しません。どの入力でも同じ長さの出力が生成されます。

Z-bossが尋ね、Bill Karwinが回答したstackoverflowの投稿から。

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)が必要になる場合があります

完全な投稿はこちらです: https://stackoverflow.com/questions/247304/what-data-type-to-use-for-hashed-password-field-and-what-length

さらに、パスワードにソルトを追加することを忘れないでください( BcryptNet はソルティングを自動的に処理します)。実装を行う前に、投稿を読むことをお勧めします。

パスワードを安全にハッシュする方法?

https://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database

1
Pilfility

属性のサイズを修正することは、データベース/アプリケーションの要件である可能性があります。リレーション内のすべての属性に固定幅フィールドを使用して2000万を超えるパスワードを格納している場合、パフォーマンス上の理由から重要になる場合があります(ただし、これは一部のRDBMS)。 OTOHデータベースが固定形式のレコードのみをサポートしているかどうかはわかりません。これを従来のリレーショナルデータベースまたはスキーマレスデータベースと仮定すると、可変サイズのレコード(VARCHAR)を使用し、拡張/アップグレードの余地を指定する(VARCHAR(200)など)ことは、より理にかなっています。すでに述べたEdgeの場合を除いて、これは機能的または測定可能なパフォーマンスへの影響はありませんが、将来のある時点でアルゴリズムの変更に対応するためにスキーマを変更する必要がないことを意味します。

1
symcbean