#javascript #ruby-on-rails #node.js #encryption #devise
#javascript #ruby-on-rails #node.js #шифрование #разработка
Вопрос:
В этом примере пароль является abcd1234
и это то, что разработано, сохраненным в базе данных
email: edu@example.com
encrypted_password: 9fead460b4eafc9fb4f188e4d6f24536f5849ed7
password_salt: k_c7dqyNKiQbSC_r8grH
Я пытаюсь создать node.js приложение, которое проверяет обычный пароль на соответствие зашифрованным данным, поэтому был бы полезен пример javascript.
Комментарии:
1. То, что у вас есть, похоже на обработанные данные того, что
devise
создано.encrypted_password
Длина верна для хэша bcrypt, но, по-видимому, этот хэш закодирован сpassword_salt
значением, которое не является частьюdevise
пакета. Прямо сейчас вашей информации недостаточно для решения вашего вопроса
Ответ №1:
Приложение использовало шифровальщик sha1, и я создал эту его версию на javascript:
function createHash (password, salt) {
let pepper = ''
let digest = ''
const STRETCHES = 10
for (let i = 0; i < STRETCHES; i ) {
digest = crypto
.createHash('sha1')
.update(`--${salt}--${digest}--${password}--${pepper}--`)
.digest('hex')
}
return digest
}
Ответ №2:
Он использует алгоритм хэширования паролей OpenBSD bcrypt()
Вот encryptor.rb
код:
# frozen_string_literal: true
require 'bcrypt'
module Devise
module Encryptor
def self.digest(klass, password)
if klass.pepper.present?
password = "#{password}#{klass.pepper}"
end
::BCrypt::Password.create(password, cost: klass.stretches).to_s
end
def self.compare(klass, hashed_password, password)
return false if hashed_password.blank?
bcrypt = ::BCrypt::Password.new(hashed_password)
if klass.pepper.present?
password = "#{password}#{klass.pepper}"
end
password = ::BCrypt::Engine.hash_secret(password, bcrypt.salt)
Devise.secure_compare(password, hashed_password)
end
end
end
Вы могли бы найти больше там
И вот еще о bcrypt.js
Пример из их readme:
Для проверки пароля:
// Load hash from your password DB.
bcrypt.compareSync("B4c0//", hash); // true
bcrypt.compareSync("not_bacon", hash); // false
Комментарии:
1. Я пытался использовать javascript bcrypt, но он хэширует в другом формате
2. Возможны две причины: приложение plataformatec devise использует пользовательский криптограф вместо стандартного или существует второй уровень шифрования между приложением и базой данных. Кроме того, вы должны знать ключи безопасности приложения и
pepper
значение (по умолчанию это адрес электронной почты). Если у вас нет доступа к исходным кодам приложения devise — вы не добьетесь успеха.