Tôi muốn tạo một hàm băm muối bằng cách sử dụng libcode crypto node.js mà không cần phải phân tích cú pháp bất kỳ dữ liệu mã cứng nào.Làm thế nào để tạo ngẫu nhiên-băm-muối với mật mã
Tôi có ý nghĩa gì với mã cứng?
var salt, hardcodedString = "8397dhdjhjh";
crypto.createHmac('sha512', hardcodedString).update(salt).digest("base64");
Có cách nào khác để tạo chuỗi ngẫu nhiên mà không sử dụng javascript thô, hàm ngẫu nhiên hoặc mã hóa cứng không?
Trân
CẬP NHẬT
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 đồng bằng HMAC không có mật khẩu băm bảo mật. 'crypto.pbkdf2' với> 50000 lần lặp lại là một lựa chọn tốt. – CodesInChaos
^- Được gọi là ['kéo dài'] (http://throwingfire.com/storing-passwords-securely/) cho những người không biết. –
Liên kết rất tốt. Bạn nên tìm một bài đăng chứa toàn bộ thông tin về chủ đề và giải thích tốt. –