2012-07-17 10 views
7

के साथ यादृच्छिक-नमक-हैश कैसे बनाएं I किसी भी हार्डकोड किए गए डेटा को पार्स किए बिना node.js crypto lib का उपयोग करके नमक-हैश बनाना चाहते हैं।क्रिप्टो

हार्डकोडेड के साथ मेरा क्या मतलब है?

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

वहाँ किसी अन्य तरीके से कैसे मैं कच्चे जावास्क्रिप्ट, यादृच्छिक कार्यों का उपयोग कर या कुछ हार्डकोड बिना एक यादृच्छिक स्ट्रिंग बना सकते हैं नहीं है?

सादर

अद्यतन

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

बीटीडब्ल्यू सादा एचएमएसी कोई सुरक्षित पासवर्ड हैश नहीं है। 50000 पुनरावृत्तियों के साथ 'crypto.pbkdf2' एक सभ्य पसंद है। – CodesInChaos

+4

^- जिसे उन लोगों के लिए ['stretching'] कहा जाता है (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

सूखी, Crypto.randomBytes (256) लौटने के लिए बदल गया; .. अभी भी mongodb दस्तावेज़ में कोई नमक नहीं है। मैं जांच करूंगा कि यह एक मोंगोज़ समस्या है –

संबंधित मुद्दे