そのパスワードはBCrypt
ハッシュされます。(からわかります$2a$10$...
)
うまくいけば、あなたのプラットフォームには次のものがあります。
BCrypt.CheckPassword(savedHash, enteredPassword);
関数。
ここの私の答えから:
BCrypt ハッシュ文字列は次のようになります。
$2a$10$M/HQVUTyxrdbiwNjokJoUOIbUAK71yvYXKPe1YdFgS2I3Pw6Ojlju
$==$==$======================-------------------------------
どこ
2a
: アルゴリズム識別子 (BCrypt)
10
:コストファクター(1,024発)
M/HQVUTyxrdbiwNjokJoUO
: OpenBSD-Base64 でエンコードされたソルト (22 文字、16 バイト)
IbUAK71yvYXKPe1YdFgS2I3Pw6Ojlju
: OpenBSD-Base64 でエンコードされたハッシュ (31 文字、24 バイト)
編集:これらの言葉がぴったり合っていることに気づきました。私は共有しなければなりませんでした:
$2a$10$TwentytwocharactersaltThirtyonecharacterspasswordhash
$==$==$======================-------------------------------
しかし、BCryptは OpenBSD に取り組んでいた人々によって作成されました。OpenBSDでは、パスワード ファイルの形式が既に定義されています。
$ [HashAlgorithmIdentifier]
$[AlgorithmSpecificData]
これは、「bcrypt 仕様」が OpenBSD パスワード ファイル形式に容赦なくリンクされていることを意味します。そして、誰かが「bcrypt ハッシュ」を作成するときはいつでも、常に次の形式の ISO-8859-1 文字列に変換します。
$ 2a
$ [Cost]
$[Base64Salt][Base64Hash]
いくつかの重要なポイント:
2a
はアルゴリズム識別子です
1
: MD5
2
: 初期の bcrypt では、どのエンコーディング パスワードが含まれているかについて混乱がありました (廃止)
2a
: 現在の bcrypt。パスワードを UTF-8 エンコードとして指定します。
- コストは、ハッシュを計算するときに使用されるコスト ファクターです。「現在の」値は 10 です。これは、内部キーのセットアップが 1,024 ラウンド行われることを意味します。
- 10: 2 10 = 1,024 回の繰り返し
- 11: 2 11 = 2,048 回の繰り返し
- 12: 2 12 = 4,096 回の繰り返し
OpenBSD パスワード ファイルで使用される base64 アルゴリズムは、他のすべての人が使用する Base64 エンコーディングとは異なります。彼らは独自のものを持っています:
Regular Base64 Alphabet: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
BSD Base64 Alphabet: ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
そのため、bcrypt の実装では、組み込みまたは標準の base64 ライブラリを使用できません。
この知識を武器にcorrectbatteryhorsestapler
、保存されたハッシュに対してパスワードを検証できるようになりました。
$2a$12$mACnM5lzNigHMaf7O1py1O3vlf6.BA8k8x3IoJ.Tq3IB/2e7g61Km