bcrypt

パスワードにランダムな「ソルト値」(salt)を付加してからハッシュ化を行う。ソルトは同じパスワードでも毎回異なる値が生成され、同一のパスワードでも異なるハッシュ値が得られる。これにより、複数の利用者が同じパスワードを使用していても保存されるハッシュは一致せず、攻撃者がハッシュ値からパスワードを推測することがより困難になる。
出力は60文字の文字列で、アルゴリズムの識別子、コストファクター(反復回数)、ソルト、ハッシュ値が一つの文字列に結合された形式になっている。ドル記号($)で要素を区切った「$2b$12$...」という文字列で、「$2b$」がアルゴリズムのバージョン、「12」がコストファクターを示す。ソルトは22文字で、自動的に生成されて埋め込まれるため、開発者が個別に管理する必要はない。
「コストファクター」(ワークファクターとも呼ばれる)は2の冪乗でハッシュ関数の反復回数を指定する設定値で、値を1増やすと計算時間が約2倍になる。機器の性能にもよるが、コストファクター10では数十~数百ミリ秒、12では数百ミリ秒程度の計算時間になることが多い。サーバの性能が向上しても、コストファクターを引き上げることで攻撃者が総当たりで試行する際のコストを高い水準に維持できる。
1999年にニールス・プロヴォス(Niels Provos)氏とデービッド・マジエレス(David Mazières)氏が発表した。Blowfish暗号をベースとした独自のアルゴリズムを使用しており、単純なSHA-256やMD5によるハッシュ値とは異なり、意図的に計算コストが高くなるよう設計されている。RubyのDevise、PHPのpassword_hash関数、Node.jsのbcryptjsライブラリなど、多くのプログラミング言語やフレームワークで利用でき、パスワード管理における標準的な手法として採用されている。