2012-07-17 12 views
7

ハードコードされたデータを解析することなく、node.js暗号ライブラリを使用してsalt-hashを作成します。暗号でランダム塩ハッシュを作成する方法

ハードコーディングとはどういう意味ですか?私は生のjavascriptの、ランダム関数を使用したり、何かをハードコーディングせずにランダムな文字列を作成することができますどのように他の方法は

var salt, hardcodedString = "8397dhdjhjh"; 
crypto.createHmac('sha512', hardcodedString).update(salt).digest("base64"); 

ありませんか?

よろしく

UPDATE

var Crypto = require('crypto') 
    , mongoose = require('mongoose'); 

module.exports = mongoose.model('User', new mongoose.Schema({ 
    username: { 
     type: String 
     , required: true 
     , index: { unique: true, sparse: true } 
     , set: toLower 
    }, 
    email: { 
     type: String 
     , required: true 
     , index: { unique: true, sparse: true } 
     , set: toLower 
    }, 
    salt: { 
     type: String 
     , set: generateSalt 
    }, 
    password: { 
     type: String 
     , set: encodePassword 
    } 
}),'Users'); 

function toLower(string) { 
    return string.toLowerCase(); 
} 

function generateSalt() { 
    //return Math.round((new Date().valueOf() * Math.random())) + ''; 
    Crypto.randomBytes('256', function(err, buf) { 
     if (err) throw err; 
     return buf; 
    }); 
    // return Crypto.randomBytes('256'); // fails to 
} 

function encodePassword(password) { 
    return password; 
    // TODO: setter has no access to this.salt 
    //return Crypto.createHmac('sha512', salt).update(password).digest("base64"); 
} 

function authenticate(plainPassword) { 
    return encodePassword(plainPassword) === this.password; 
} 
+2

btwプレーンHMACは安全なパスワードハッシュではありません。 'crypto.pbkdf2'と> 50000回の反復は適切な選択です。 – CodesInChaos

+4

^- それは知らない人のために[ストレッチ](http://throwingfire.com/storing-passwords-securely/)と呼ばれています。 –

+0

非常に良いリンク。件名に関する情報がたくさん入っていて、説明が良い投稿を見つけるのは良いことです。 –

答えて

16

ドキュメントを簡単に見てはcrypto.randomBytes機能をオンにします。

var buf = crypto.randomBytes(16); 

これは、生のバイトを含むバッファを返します。文字列が必要な場合は、toString('base64')またはtoString('hex')を使用できます。

+0

私はマングースでこれを使用することはできません。上記の更新を参照してください –

+0

なぜ番号を引用していますか?そして、256バイトは塩のために少し長いです、私のポストの256は例の引用だけです。 – CodesInChaos

+0

Sryは、Crypto.randomBytes(256);を返すように変更されました; mongodbドキュメントにはまだ塩がありません。私はこれがmongooseの問題であるかどうかを確認します –

関連する問題