Хэширование паролей в Ruby / Ruby on Rails

#ruby-on-rails #ruby #encryption

#ruby-on-rails #ruby #шифрование

Вопрос:

это мой первый пост о стеке. Мне просто любопытно, поскольку я читал о хэшировании паролей, и чаще всего мне говорили использовать вместо этого BCrypt. Однако есть ли какие-либо документы, которые я могу использовать, чтобы попытаться самостоятельно хэшировать пароли? Я знаю, что использование BCrypt оптимально по соображениям безопасности, но я хотел бы поиграть и понять коды или функции, связанные с хэшированием пароля, когда пользователь регистрируется без использования BCrypt или любых других драгоценных камней.

Для этого я попытался использовать ‘SecureRandom’ и ‘Digest’, но, похоже, я все еще не могу получить желаемый результат. Возможно, я все еще новичок в этом.

Это мои коды. Я очень новичок в этом.

 require 'digest'

class UsersController < ApplicationController

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to root_url
    else

    end
  end

  private

  def user_params
    params.require(:user).permit(:first_name, :last_name, :email, password_hash([:password]))
  end

  def password_hash(password)
    hash = Digest::SHA256.hexdigest(password)
  end
end
 

Как только я преобразую его в строки, столбец пароля в базе данных будет пустым после регистрации пользователя. Я знаю, что мои коды запутаны, но я хотел бы попытаться зашифровать пароли без использования драгоценных камней.

Комментарии:

1. Ваш вопрос не имеет никакого отношения к вашему коду. «Я пробовал использовать SecureRandom и Digest , но, похоже, мне все еще не удается получить желаемый результат». Что вы сделали, и каков был желаемый результат? Концепция хэширования проста, но детали любого достаточно надежного алгоритма, который можно было бы использовать на практике, довольно сложны. В принципе, для реального мира золотое правило криптографии заключается в том, чтобы использовать только библиотеки криптографии, написанные профессиональными криптографами, никогда не создавать свои собственные (если только вы не принадлежите к небольшому меньшинству людей, которые это хорошо понимают).

2. @Amadan Привет, спасибо за ваш ответ. Возможно, я неправильно сформулировал это. Желаемый результат заключается в том, что при регистрации пользователя его пароль будет автоматически хэшироваться, а не записываться в базе данных. Это был желаемый результат. Кроме того, прямо сейчас я не знаю, где найти документацию по криптографии, касающуюся ruby. Либо я не умею гуглить, либо я просто новичок..

3. Мы не можем увидеть, что вы сделали неправильно в своем коде хеширования, если мы не видим ваш код хеширования. Вы можете ознакомиться с документацией по криптометодам Ruby в документах API для отдельных методов хеширования; например, в документах для BCrypt gem.

4. @Amadan привет, я отредактировал свой пост, чтобы вы могли видеть, что я пытался сделать. Я надеюсь, что это может пролить некоторый свет на то, чего я пытаюсь достичь..

Ответ №1:

Моя команда всегда использует Devise gem для работы с пользователями. Он прост в использовании и обладает отличным функционалом: шифрование паролей, отправка электронной почты, авторизация и другие