$ 2y хэши bcrypt в Node.js

Я имею дело со старой базой данных с$2y хэши. Я немного покопался в этом, тоже наткнулся напереполнение стека на разницу между$2a а также$2y.

Я посмотрел в модуль узла дляbcrypt который, кажется, генерирует и сравнивает только$2a хэши.

https://github.com/ncb000gt/node.bcrypt.js/issues/175https://github.com/ncb000gt/node.bcrypt.js/issues/349https://github.com/ncb000gt/node.bcrypt.js/issues/213

Я нашел сайт, который генерирует$2y хеши, чтобы я мог проверить их сbcrypt.

http://aspirine.org/htpasswd_en.html

Вот пример$2y хеш строкиhelloworld.

helloworld:$2yhttps://github.com/ncb000gt/node.bcrypt.js/issues/213tRM7x9gGKhcAmpeqKEdhj.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 = [
  '$2ahttps://github.com/ncb000gt/node.bcrypt.js/issues/2136ppmIdlNEPwxWJskPaQ7l.d2fblh.GO6JomzrcpiD/hxGPOXA3Bsq',
  '$2ahttps://github.com/ncb000gt/node.bcrypt.js/issues/213YmpoYCDHzdAPMbd9B8l48.hkSnylnAPbOym367FKIEPa0ixY.o4b.',
  '$2ahttps://github.com/ncb000gt/node.bcrypt.js/issues/213Xfy3OPurrZEmbmmO0x1wGuFMdRTlmOgEMS0geg4wTj1vKcvXXjk06',
  '$2ahttps://github.com/ncb000gt/node.bcrypt.js/issues/213mYgwmdPZjiEncp7Yh5UB1uyPkoyavxrYcOIzzY4mzSniGpI9RbhL.',
  '$2ahttps://github.com/ncb000gt/node.bcrypt.js/issues/213dkBVTe2A2DAn24PUq1GZYe7AqL8WQqwOi8ZWBJAauOg60sk44DkOC'
]

var hashesGeneratedUsingAspirineDotOrg = [
  '$2yhttps://github.com/ncb000gt/node.bcrypt.js/issues/213MKgpAXLJkwx5tpijWX99Qek2gf/irwvp5iSfxuFoDswIjMIbj2.Ma',
  '$2yhttps://github.com/ncb000gt/node.bcrypt.js/issues/213tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW'
]

var hashesGeneratedUsingAspirineDotOrgSwippedYForA = [
  '$2ahttps://github.com/ncb000gt/node.bcrypt.js/issues/213MKgpAXLJkwx5tpijWX99Qek2gf/irwvp5iSfxuFoDswIjMIbj2.Ma',
  '$2ahttps://github.com/ncb000gt/node.bcrypt.js/issues/213tRM7x9gGKhcAmpeqKEdhj.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:$2yhttps://github.com/ncb000gt/node.bcrypt.js/issues/213iuC7GYH/h1Gl1aDmcpLFpeJXN9OZXZUYnaqD2NnGLQiVGQYBDtbtO

Перед тем как выкладывать

helloword

Который я предполагаю хэшировал пустую строку.

Эти изменения меняютy дляa работает вbcrypt, А такжеtwin-bcrypt просто работает.

Ответы на вопрос(1)

Ваш ответ на вопрос