Gマイナー志向

とくに意味はありません

パスワードのハッシュに使うべきPBKDF2、Bcrypt、HMACの各言語実装一覧

いつも忘れるのでメモ。

元ネタ:Are you sure SHA-1+salt is enough for passwords?
日本語訳:「SHA-1+salt」はパスワードに十分だと思いますか?

こうしたスキームをいくつか選ぶことができる:

各選択肢はそれぞれの強みと弱みがあるが、これらは全てSHA1+saltのような汎用ハッシュのインプリメンテーションより、はるかに強力だ。

ということで、各言語での実装を調べてみた。実装が正しいかは調べてない。別実装もあるかもしれない。

言語 PBKDF2 Bcrypt HMAC
Java Bouncy Castle, PBKDF2.jar jBCrypt Bouncy Castle, サンプル実装
JavaScript SJCL, crypt-js*1 jsBCrypt SJCL, crypt-js
Perl Crypt::PBKDF2 Crypt::Eksblowfish::Bcrypt Digest::HMAC
PHP サンプル実装 crypt($str, $hash)*2 hash_hmac
Python python-pbkdf2 py-bcrypt import hmac
Ruby OpenSSL::PKCS5, pbkdf2-ruby bcrypt-ruby*3 OpenSSL::HMAC, ruby-hmac

追記

おーマジっすか。知りませんでした。ということで差し替えました。

*1:SJCLの方が速いらしい

*2:CRYPT_BLOWFISHが1の場合

*3:メンテされてないため非推奨