2017-09-16 3 views
0

私はPBKDF2とCryptoJSのsalt hashingを使用してパスワードを保存しようとしています。これは私が登録からユーザーパスワードをハッシュ一部です:CryptoJS PBKDF2とsaltハッシュメソッドが動作しない

var passwordInput = document.getElementById("txtPasswordInput").value; 
var salt = CryptoJS.lib.WordArray.random(128/8); 
var key512Bits1000Iterations = CryptoJS.PBKDF2(passwordInput, salt, { keySize: 512/32, iterations: 1000 }); 

console.log(salt.toString()); 
console.log(key512Bits1000Iterations.toString()); 

ABCD1234とパスワードとして、私は私のデータベースにこれらを保存するための管理:

私のログインページで
Salt: cec16a7e68e0f3e49f729dfd90b0893a 
Password: d974b96a494f39aec7f1fa6c495b4783b43e579c070b695... 

、私がしようとしていますユーザー入力に基づいてハッシュを再度計算して資格情報を確認します。

var passwordInput = document.getElementById("txtPassword").value; 
// retrieve from firebase 
var password = accountData.password; 
var salt = accountData.salt; 
var key512Bits1000Iterations = CryptoJS.PBKDF2(passwordInput, salt, { keySize: 512/32, iterations: 1000 }); 
console.log(salt.toString()); 
console.log(key512Bits1000Iterations.toString()); 

if(password != key512Bits1000Iterations){ 
console.log('wrong'); 
}else{ 
console.log('correct'); 
} 

しかし、それは私を「間違って」返していました。私はハッシュされたパスワードを印刷したが、両方とも異なっている。

また、レジスタまたはログインボタンを押した後、ハッシュアルゴリズムが実際には計算に時間がかかってからブラウザが再び応答するようになります。アルゴリズムはコンピューティングが遅くなるように設計されていますか?どのようにこれを克服するためのアイデア?

アイデア?ありがとう!

答えて

2

ログインページで、塩は16進数として解析する必要があります。

はい、PBKDF2は遅くなるように設計されています。反復回数を減らして、セキュリティを犠牲にしてスピードアップすることができます。

+0

塩を16進数として解析する理由はありますか?申し訳ありませんが、私は暗号フィールドにちょっと新しいです。この場合、速度性能とセキュリティ目的に関して、反復の望ましい許容範囲はどれくらいですか? – guest176969

+0

@ guest176969 1.ヘキサの使用はおそらくバイナリデータを処理するJavascriptの方法です。合理的な速度は約100msのCPU時間です。 – zaph

+0

これをデータベースに保存するときに16進文字列に塩をシリアル化したので、16進文字列から非直列化する必要があります。 –

関連する問題