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

https://code.i-harness.com

मैं $2y हैशेस के साथ एक पुराने डेटाबेस से निपट रहा हूँ मैंने इसे थोड़ी सी खोद ली है, $2a और $2y बीच अंतर पर स्टैक अतिप्रवाह पर भी ठोकर खाई है I

मैं bcrypt लिए नोड मॉड्यूल में देखा जो केवल $2a हैश उत्पन्न और तुलना की जा रही है

मुझे एक वेबसाइट मिली जो कि $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 सिर्फ काम करता है





bcrypt