「秘密の」文字列をハッシュとしてデータベースに保存しています(データが侵害された場合)。私は bcrypt を使用していましたが、明らかに最初の 55 文字しか使用できないことがわかりました。基本的に、誰かがこれらの秘密の文字列を推測しようとします。私は現在、彼らの推測をハッシュして、ハッシュされた「秘密」の文字列と比較しています。
これを行う最良の方法は何ですか?一部の文字列は最大 500 文字になるため、Bcrypt は機能しません。何か案は?
「秘密の」文字列をハッシュとしてデータベースに保存しています(データが侵害された場合)。私は bcrypt を使用していましたが、明らかに最初の 55 文字しか使用できないことがわかりました。基本的に、誰かがこれらの秘密の文字列を推測しようとします。私は現在、彼らの推測をハッシュして、ハッシュされた「秘密」の文字列と比較しています。
これを行う最良の方法は何ですか?一部の文字列は最大 500 文字になるため、Bcrypt は機能しません。何か案は?
入力が推測可能な場合は、単純なハッシュ (MD5、SHA-1、または SHA-2) を使用しないでください。推測の検証は安価です。
簡単なトリックは、最初に SHA-256 で入力をハッシュし (32 バイトまたは 43 Base64 文字に削減)、次にそれに bcrypt を適用することです。
そうすれば、bcrypt は高価でソルト化されたものを処理し、SHA-256 は大きな入力を処理します。
https://security.stackexchange.com/questions/30315/fixing-the-high-bit-problem-in-phps-crypt-implementation/30326#30326を参照してください。
私はMD5の大ファンです。これは、SHAよりも高速で、事実上元に戻すことはできません。チェックサムの比較として、ファイル全体を実行するために使用しました。さらに、PHPに組み込まれている関数です。
着信文字列をMD5して、データベースに保存されているMD5ed回答と比較するだけです。
MD5文字列の長さはわずか32文字です。データベースのサイズを抑えるのは素晴らしいことですが、2つの長い文字列が実際に同じMD5結果になる可能性がありますが、これは非常にありそうにありません。
長さ制限のない対称暗号化アルゴリズムであるBlowfishの使用を試すことができます。
PHP Pear にはCrypt_Blowfishクラスの実装があります。
復号化する機能が必要ない場合は、 のようなものを使用することをお勧めしますSHA1
。PHP もこれをサポートしています。