2012-07-17 33 views
7

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; 
} 
+2

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

+4

^- Được gọi là ['kéo dài'] (http://throwingfire.com/storing-passwords-securely/) cho những người không biết. –

+0

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. –

Trả lời

16

Một cái nhìn lướt qua tài liệu lần lượt lên các crypto.randomBytes chức năng.

var buf = crypto.randomBytes(16); 

Điều này trả về bộ đệm chứa byte thô. Nếu bạn muốn một chuỗi, bạn có thể sử dụng toString('base64') hoặc toString('hex').

+0

Tôi không quản lý để sử dụng điều này với mongoose. Xem cập nhật ở trên –

+0

Tại sao bạn trích dẫn số này? Và 256 byte là một chút dài cho một muối, 256 trong bài viết của tôi chỉ là dấu ngoặc kép từ ví dụ. – CodesInChaos

+0

Sry, thay đổi để trả về Crypto.randomBytes (256); .. vẫn không có muối trong tài liệu mongodb. Tôi sẽ kiểm tra nếu đây là một vấn đề mongoose –

Các vấn đề liên quan