2017-03-11 6 views
0

私は認証されたWebアプリケーションを実装しています。ユーザー名とパスワードの保存についていくつか質問があります。Node.jsパスワードハッシュと塩の質問

TFAメソッドを実装する可能性はなく、ハッシュされたパスワードとソルトをデータベースに保存する方法について専門家の助言が必要です。

createSalt = function() { 
var len = 30; 
return crypto.randomBytes(Math.ceil(len * 3/4)) 
    .toString('base64') // convert to base64 format 
    .slice(0, len) // return required number of characters 
    .replace(/\+/g, '0') // replace '+' with '0' 
    .replace(/\//g, '0'); // replace '/' with '0' 
} 

hashPassword = function(password, salt) { 
    var hash = crypto.createHash('sha256'); 
    hash.update(password || ""); 
    hash.update(salt || ""); 
    return hash.digest('hex'); 
} 

任意のコメントや改善:

これらの塩と、私はパスワードをハッシュ方法を生成するために、私のJS関数はありますか?

アドバイスありがとうございます。 crypto同期パスワードベース鍵導出関数2(PBKDF2)の実装を提供してノードとして

答えて

0

、あなたはその(2ライナー)のようにそれを行うことができます。

let saltlength = 32; 
let keylength = 128; 

let salt = crypto.randomBytes(saltlength).toString('hex'); 
let key = crypto.pbkdf2Sync(password, salt, 1000, keylength, 'sha512').toString('hex'); 

1000は、繰り返しの数である...とtoString(hex)は文字列の長さを2倍にします。ここでは塩の長さは64、キーの長さは256 ...あなたのニーズに合わせて調整します。私は個人的に長い塩の長さ(128)と長い鍵の長さ(512)を使用するのが好きです。

toString('base64') - あなたが使ったものはちょっとしたスペースを節約しますが、ちょっとした "アフターワーク"が必要です。しかし、とにかく、私はあなたのアプローチが好きです。

関連する問題