ショートバージョン:ハッシュ値をJavaScriptライブラリnode-password-hashと比較するには?
私は今だ1は私のデータベースに既に存在だものに「等しい」であればどのように私は確認することができ、同じ値をランダム塩でハッシュ化されたかどうかを知りたいと思い、ユーザのパスワードとして保存されます。また、ここで同等の意味は何ですか?
ロングバージョン:
私はパスワードをハッシュ化する必要がある場合、ハッシュ関数は次のように動作することを考えて今まで:
- のは、それがそのアルゴリズムSHA1
- 使用だとしましょう、アルゴリズムを選択します。あなたが入力されたか、どのようにそれが
- のように見えなかったユーザーでデータベースにハッシュ値を入れて、ログインが使用されたときに必要なものを推測することができないので、多くの入力を変更するには入力に再びハッシュ関数とユーザーと一緒に、ログインフェーズの間にそれらを格納、ランダムな塩を使用することが提案されているデータベース
- ですでにだ1でそれを一致させるには、指定されたパスワードをハッシュし、それに合わせて、その塩を取りますすでにデータベースにハッシュされた値。だから、
、私はpasswordHash.generate()
がランダム塩を使用していることを知っているのNode.js
var passwordHash = require('password-hash');
var foo = passwordHash.generate('password123');
var bar = passwordHash.generate('password123');
console.log(foo); //sha1$d1d19f32$1$d5cb099afdd9bb130c969e0394c9bf5e57d6a2aa
console.log(bar); //sha1$df372235$1$99dfd5485e8a223e21738621bf4a7cdfca949721
console.log(passwordHash.verify('password123', foo)); //true
console.log(passwordHash.verify('password123', bar)); //true
に次のコードを持って、それが$...$
間の部分です。ドキュメンテーションでは、塩がどこかに保存されていることがわかりません。そうであれば、2つのハッシュ値が同じではないのはなぜですか?
私はpasswordHash.verify()
ハッシュ"password123"
と考えて、それがfoo
、あるいはbar
と同じであるかどうかを確認します。しかし、私は常にtrueを得るため、これが起こることはできませんが、foo
とbar
は異なっています。
それでは、どのようpasswordHash.verify()
に動作しますか?
は 'SHA1の$'とそれの後の最初の '$'との間の部分です。 (例: "d1d19f32")passwordHashはこれまで使用されていたのと同じ塩を使用してパスワードを再ハッシュし、同じハッシュを取得することを確認できます。 –
ああああ。あなたは天才です。ありがとう、それは何も複雑ではなかった – sundri23
@ user2882590あなたは別のライブラリを使用することをお勧めします。使用しているライブラリのREADMEには非推奨となっており、代わりにbcryptまたはscryptを使用する必要があります。https://github.com/davidwood/node-password-hash/blob/master/README.md – bhspencer