さて、私はそれを書きました。
使用法:
hash: string;
hash := TBCrypt.HashPassword('mypassword01');
返しのようなもの:この(OpenBSDの)スタイルのパスワードハッシュに関する有用なことがある
$2a$10$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm
:
- それがアルゴリズムを特定していること(
2a
= bcrypt)
- サルあなたのために自動的に作成され、ハッシュ(
Ro0CUfOqk6cXEKf3dyaM7O
)
- コストファクタのパラメータもハッシュ(
10
)と一緒に運ばれます。パスワードを確認するには
は正しいです:
isValidPassword: Boolean;
isValidPassword := TBCrypt.CheckPassword('mypassword1', hash);
bcryptのは、キー設定がが行く反復回数を決定コスト要因を、使用しています。コストが高いほど、ハッシュを計算するのがより高価になります。
const
BCRYPT_COST = 10; //cost determintes the number of rounds. 10 = 2^10 rounds (1024)
この場合10
のコストは、キーが拡大し、2 10
= 1024回を塩漬けされることを意味します:定数BCRYPT_COST
は、デフォルトのコストが含まれています。これは、現時点で一般的に使用されているコスト要因です(初期21 st世紀)。
知られていない理由で、OpenBSDのハッシュパスワードは、地球上の他の人が使っているBase64とは異なるBase64の変種に変換されていることにも興味があります。したがって、TBCrypt
にはカスタムベース64エンコーダとデコーダが含まれています。
Unicode文字列をUTF-8にはをエンコードしているハッシュ化されたデータに
だから、HashPassword
とCheckPassword
関数がWideString
(別名UnicodeString
)、内部でUTF-8に変換します。あなたはUnicodeString
が予約語であるデルファイのバージョンでこれを実行している場合は、単純に定義する:
type
UnicodeString = WideString;
をI、デビッドHeffernanのは知っているとして、デルファイXE 2を所有していない私はUnicodeString
エイリアスを追加しましたcompilers.inc
は含まず、UnicodeString
を定義していません(定義名はわからないので、テストすることもできません)。あなたは無料コードから何を望みますか?デイブ・バートンは、iが適応され、書いた拡張、いくつかのバグを修正し、DUnitのを追加
インターチューブではどこに永遠に生きていくことができるのでしょうか?
更新1/1/2015:それは以前のGitHubに配置されました:BCrypt for Delphi。
ボーナス2015年4月16日:今bcryptのようScrypt for Delphi
あなたはVistaで導入されたWindowsのbcryptを検討する準備ができていますか? JEDIにはヘッダーの翻訳があります:JwaBCrypt.pas –
@David:これは質問で言及した 'bcrypt.h' winapiヘッダーのもう一つの翻訳です。実際にはBlowfishのパスワードハッシングの実装が含まれていないようです。 (または何かが欠落していますか?) –
RudyさんのヘッダーはJEDIのヘッダーです。http://blog.delphi-jedi.net/2008/03/10/new-and-additional-header-files-from-rudy/ –