ハードコードされたデータを解析することなく、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;
}
btwプレーンHMACは安全なパスワードハッシュではありません。 'crypto.pbkdf2'と> 50000回の反復は適切な選択です。 – CodesInChaos
^- それは知らない人のために[ストレッチ](http://throwingfire.com/storing-passwords-securely/)と呼ばれています。 –
非常に良いリンク。件名に関する情報がたくさん入っていて、説明が良い投稿を見つけるのは良いことです。 –