$ 2y Bcrypt Hashes in Node.js

Ich habe es mit einer alten Datenbank zu tun mit$2y Hashes. Ich habe mich ein bisschen damit beschäftigt und bin auch auf @ gestolperder Stapelüberlauf auf den Unterschied zwischen$2a und$2y.

Ich habe im Knotenmodul nach @ gesuchbcrypt was nur @ zu erzeugen und zu vergleichen schei$2a hashes.

https: //github.com/ncb000gt/node.bcrypt.js/issues/17https: //github.com/ncb000gt/node.bcrypt.js/issues/34https: //github.com/ncb000gt/node.bcrypt.js/issues/21

Ich habe eine Website gefunden, die @ generier$2y Hashes, damit ich sie mit @ testen kabcrypt.

http: //aspirine.org/htpasswd_en.htm

Hier ist ein Beispiel für ein$2y Hash der Zeichenfolgehelloworld.

helloworld:$2y$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW

Scheint, dass das Modul keine Möglichkeit hat, @ zu validier$2y hashes.

Hier ist mein Test.

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)

Hier sind die Ergebnisse

// hashesGeneratedUsingAspirineDotOrg
// [ false, false ]
// hashesGeneratedUsingBcryptModule
// [ true, true, true, true, true ]
// hashesGeneratedUsingAspirineDotOrgSwippedYForA
// [ false, false ]

Ich bin ratlos, wie ich vergleichen kann$2y Hashes im Knoten.

Da ist eine andere Stapelüberlauf-Frage / Antwort das heißt, Sie können nur die @ ände$2y zu$2a aber das scheitert immer noch für mich.

Aktualisieren

Ich habe @ verwend der Generator falsch, weil es ein @ i.htpasswd Passwort-Generator Sie müssen den Benutzernamen und das Passwort in diesem Format eingeben.

reggi helloworld

Und die Ausgabe entspricht hier:

reggi:$2y$10$iuC7GYH/h1Gl1aDmcpLFpeJXN9OZXZUYnaqD2NnGLQiVGQYBDtbtO

Bevor ich als Putten nur

helloword

Welche ich nehme an, eine leere Zeichenfolge gehasht.

Mit diesen Änderungen ändert sich dasy zu einema arbeitet inbcrypt. Undtwin-bcrypt funktioniert einfach.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage