2014-04-02 5 views
7

का उपयोग कर नोड.जेएस पासवर्ड हैशिंग बीसीआरपीटी विकल्प मैं वास्तव में हैश के लिए bcrypt मॉड्यूल का उपयोग कर रहा हूं और हैश पासवर्ड की तुलना कर रहा हूं।क्रोडो

bcrypt मॉड्यूल को निकालने और पासवर्ड 0 की तुलना करने के लिए डिफ़ॉल्ट crypto लाइब्रेरी का उपयोग करने के लिए मैं क्या करना चाहता हूं।

क्या यह संभव है?

क्या यह node-bcrypt का उपयोग करने से कम सुरक्षित होगा?

क्या आपके पास कोई उदाहरण/ट्यूटोरियल/डॉक्टर/लिंक है कि कैसे करें?

या उदाहरण मैं यह वास्तव में की तरह कर रहा हूँ:

bcrypt.hash(string,secret_key) 
bcrypt.compare(string,string,secret_key); 

मैं सिर्फ क्रिप्टो यदि संभव हो तो के साथ इस को दोहराने के लिए करना चाहते हैं:

crypto.hash(string,secret_key) 
    crypto.compare(string,string,secret_key); 

उत्तर

7

आप क्रिप्टो पुस्तकालय से PBKDF2 का उपयोग कर हैश कर सकते हैं:

crypto.pbkdf2(password, salt, iterations, keylen, digest, callback) 

नमूना कार्यान्वयन:

यह SHA512 दिया पासवर्ड, नमक और पुनरावृत्तियों से दिया लंबाई के एक कुंजी को प्राप्त करने के रूप में HMAC डाइजेस्ट एल्गोरिथ्म का उपयोग करता:

const crypto = require('crypto'); 
crypto.pbkdf2('secret', 'salt', 100000, 512, 'sha512', (err, derivedKey) => { 
    if (err) throw err; 
    console.log(derivedKey.toString('hex')); // '3745e48...aa39b34' 
}); 

यहाँ संदर्भ चला जाता है। Pbkdf2 में bcrypt जैसी ही धीमी विशेषताएं हैं। पीबीकेडीएफ 2, बीक्रिप्ट, या स्क्रिप के साथ, हमलावर केवल प्रति सेकंड कुछ हज़ार अनुमान (या कम, कॉन्फ़िगरेशन के आधार पर) कर सकता है।

+0

उत्साह से मुझे बहुत कुछ चाहिए – sbaaaang

+1

ध्यान दें कि हमलावर [GPU के साथ [oclHashcat] का उपयोग कर हमलावर (http://hashcat.net/ oclhashcat /) या इसी तरह से आप प्रति सेकंड कई अनुमान लगा सकते हैं, जब तक आप वास्तव में पुनरावृत्तियों को रैंप नहीं करते। उदाहरण के लिए, 8x एएमडी आर 9 2 9 0 एक्सस्टॉक कोर घड़ी वाला एक पीसी एक या अधिक 1.3 मिलियन पीबीकेडीएफ 2-एचएमएसी-एसएचए -1 (पासवर्ड, नमक, 8192,20) प्रति सेकंड परीक्षण कर सकता है, यानि 3.4E12 या 2^41 अनुमान 30 दिन। आपको अपनी शैली को और अधिक परेशान करने के लिए अपनी पुनरावृत्ति गणना (या बीसीआरपीटी कार्य कारक) को अपनाना होगा। –

+0

@ एंटी-कमजोर पासवर्ड हाँ, सीपीयू और जीपीयू गति हमेशा उन्नयन कर रहे हैं, यही कारण है कि आपके पास pbkdf2 में कॉन्फ़िगर करने योग्य पुनरावृत्तियों हैं, इसलिए आप हमेशा शेष – Masum

3

bcrypt, क्रिप्टो तुलना में अधिक सुरक्षित हो जाएगा बस क्योंकि यह धीमा है। हालांकि, यहां कुछ पासवर्ड कार्यों मैं coffeescript में लिखा क्रिप्टो का उपयोग कर रहे हैं (मैं एक '$' के साथ create_password भागों में शामिल होने के लिए, आप check_password में है कि विभाजन देखेंगे):

create_password = function(passwd, method, salt) { 
    var hmac; 
    method || (method = "sha1"); 
    salt || (salt = crypto.randomBytes(6).toString('base64')); 
    hmac = crypto.createHmac(method, salt); 
    hmac.end(passwd); 
    return { 
     hash: hmac.read().toString('hex'), 
     salt: salt, 
     method: method 
    }; 
    }; 

    check_password = function(hashed, passwd) { 
    var hash, hashp, method, salt, _ref; 
    _ref = hashed.split("$"), method = _ref[0], salt = _ref[1], hashp = _ref[2]; 
    hash = create_password(passwd, method, salt).hash; 
    return hash === hashp; 
    }; 

उदाहरण उपयोग:

passwd = "SOME STRING HERE" 
hash_parts = create_password(passwd) 
hashed = pwd_parts.method + "$" + pwd_parts.salt + "$" + pwd_parts.hash 
check_password(hashed, passwd) 
+0

SHA1? :) @ टिम ब्राउन – sbaaaang

+0

हाँ, यह विरासत उस तरह से संग्रहीत थी, और मेरे ऐप को कुछ भी सुरक्षित सुरक्षित की आवश्यकता नहीं थी। जाहिर है विन्यास योग्य हालांकि! –

+0

हेल्पप के लिए +1, धन्यवाद आदमी लेकिन मैं अपने मामले में ऊपर दिए गए अन्य सुझावों को बेहतर बनाता हूं :) – sbaaaang