javascript - नोड। जेएस में $ 2y बीक्रिप्ट हैश
node.js cryptography (1)
- जब
bcrypt
का उपयोग करते हुएy
को किसीa
को बदलते हैं -
twin-bcrypt
का प्रयोग करते समय हैश सिर्फ काम करता है
Http://aspirine.org/htpasswd_en.html का उपयोग करते समय सुनिश्चित करें कि आप उपयोगकर्ता नाम और पासवर्ड प्रदान करते हैं
reggi helloworld
फिर:
reggi:$2y$10$Am0Nf/B6.S/Wkpr6IVdIZeuHWNa/fqoLyTNmlyrSg22AjRf2vS.T.
यहां bcrypt
और twin-bcrypt
दोनों के साथ एक काम उदाहरण है।
var twinBcrypt = require('twin-bcrypt')
var bcrypt = require('bcrypt')
var string = 'helloworld'
var bcryptAttempt = bcrypt.compareSync(string, "$2y$10$Am0Nf/B6.S/Wkpr6IVdIZeuHWNa/fqoLyTNmlyrSg22AjRf2vS.T.".replace(/^\$2y/, "$2a"))
console.log(bcryptAttempt)
var twinBcryptAttempt = twinBcrypt.compareSync(string, "$2y$10$Am0Nf/B6.S/Wkpr6IVdIZeuHWNa/fqoLyTNmlyrSg22AjRf2vS.T.")
console.log(twinBcryptAttempt)
आउटपुट:
true
true
मैं $2y
हैशेस के साथ एक पुराने डेटाबेस से निपट रहा हूँ मैंने इसे थोड़ी सी खोद ली है, $2a
और $2y
बीच अंतर पर स्टैक अतिप्रवाह पर भी ठोकर खाई है I
मैं bcrypt
लिए नोड मॉड्यूल में देखा जो केवल $2a
हैश उत्पन्न और तुलना की जा रही है
- https://github.com/ncb000gt/node.bcrypt.js/issues/175
- https://github.com/ncb000gt/node.bcrypt.js/issues/349
- https://github.com/ncb000gt/node.bcrypt.js/issues/213
मुझे एक वेबसाइट मिली जो कि $2y
करता है, इसलिए मैं उन्हें bcrypt
साथ परीक्षण कर सकता हूं
यहां helloworld
$2y
हैश का एक उदाहरण है
helloworld:$2y$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW
लगता है कि मॉड्यूल $2y
हैश मान्य करने का कोई तरीका नहीं है।
यहाँ मेरा परीक्षण है
var Promise = require('bluebird')
var bcrypt = require('bcrypt')
var string = 'helloworld'
Promise.promisifyAll(bcrypt)
// bcrypt.genSalt(10, function(err, salt) {
// bcrypt.hash(string, salt, function(err, hash) {
// console.log(hash)
// })
// })
var hashesGeneratedUsingBcryptModule = [
'$2a$10$6ppmIdlNEPwxWJskPaQ7l.d2fblh.GO6JomzrcpiD/hxGPOXA3Bsq',
'$2a$10$YmpoYCDHzdAPMbd9B8l48.hkSnylnAPbOym367FKIEPa0ixY.o4b.',
'$2a$10$Xfy3OPurrZEmbmmO0x1wGuFMdRTlmOgEMS0geg4wTj1vKcvXXjk06',
'$2a$10$mYgwmdPZjiEncp7Yh5UB1uyPkoyavxrYcOIzzY4mzSniGpI9RbhL.',
'$2a$10$dkBVTe2A2DAn24PUq1GZYe7AqL8WQqwOi8ZWBJAauOg60sk44DkOC'
]
var hashesGeneratedUsingAspirineDotOrg = [
'$2y$10$MKgpAXLJkwx5tpijWX99Qek2gf/irwvp5iSfxuFoDswIjMIbj2.Ma',
'$2y$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW'
]
var hashesGeneratedUsingAspirineDotOrgSwippedYForA = [
'$2a$10$MKgpAXLJkwx5tpijWX99Qek2gf/irwvp5iSfxuFoDswIjMIbj2.Ma',
'$2a$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW'
]
hashesGeneratedUsingBcryptModule = hashesGeneratedUsingBcryptModule.map(hash => bcrypt.compareAsync(string, hash))
hashesGeneratedUsingAspirineDotOrg = hashesGeneratedUsingAspirineDotOrg.map(hash => bcrypt.compareAsync(string, hash))
hashesGeneratedUsingAspirineDotOrgSwippedYForA = hashesGeneratedUsingAspirineDotOrgSwippedYForA.map(hash => bcrypt.compareAsync(string, hash))
Promise.all(hashesGeneratedUsingBcryptModule)
.tap(() => console.log('hashesGeneratedUsingBcryptModule'))
.then(console.log)
Promise.all(hashesGeneratedUsingAspirineDotOrg)
.tap(() => console.log('hashesGeneratedUsingAspirineDotOrg'))
.then(console.log)
Promise.all(hashesGeneratedUsingAspirineDotOrgSwippedYForA)
.tap(() => console.log('hashesGeneratedUsingAspirineDotOrgSwippedYForA'))
.then(console.log)
यहां परिणाम दिए गए हैं:
// hashesGeneratedUsingAspirineDotOrg
// [ false, false ]
// hashesGeneratedUsingBcryptModule
// [ true, true, true, true, true ]
// hashesGeneratedUsingAspirineDotOrgSwippedYForA
// [ false, false ]
मुझे स्टांप हो रहा है कि मैं कैसे नोड में $2y
हैश का तुलना कर सकता हूं।
एक और स्टैक ओवरफ़्लो प्रश्न / उत्तर है जो कहता है कि आप $2y
से $2a
को बदल सकते हैं लेकिन यह अभी भी मेरे लिए विफल रहता है
अद्यतन करें!
मैं जनरेटर गलत तरीके से उपयोग कर रहा था क्योंकि यह एक .htpasswd
पासवर्ड जनरेटर है जिसे आपको इस प्रारूप में उपयोगकर्ता नाम और पासवर्ड रखना होगा।
reggi helloworld
और आउटपुट यहां पर मेल खाती है:
reggi:$2y$10$iuC7GYH/h1Gl1aDmcpLFpeJXN9OZXZUYnaqD2NnGLQiVGQYBDtbtO
इससे पहले कि मैं सिर्फ डाल दिया
helloword
जो मैं मान रहा हूँ एक खाली स्ट्रिंग धोया।
इन परिवर्तनों के साथ bcrypt
में a
काम करने के लिए y
बदल रहा है और twin-bcrypt
सिर्फ काम करता है