#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 для работы с пользователями. Он прост в использовании и обладает отличным функционалом: шифрование паролей, отправка электронной почты, авторизация и другие