У меня есть 4-значный атрибут секретного кода, который я шифрую с помощью sha1 на данный момент.
Поскольку это не очень безопасно, я бы хотел перейти на использование bcrypt.
Чтобы преобразовать хэш sha1 в bcrypt, я написал следующее рейк-задание
namespace :user do
desc "convert all secret codes encryption from sha1 to bcrypt"
@rainbow_table = {}
task secret_code: :environment do
User.all.each do |user|
clean_secret_code = @rainbow_table[user.secret_code]
bcrypted_secret_code = BCrypt::Password.create(clean_secret_code)
user.update_attributes secret_code: bcrypted_secret_code
p user.valid_secret_code? clean_secret_code.to_s
end
end
def create_rainbow_table
("0000".."9999").each do |i|
@rainbow_table.merge!(Digest::SHA1.hexdigest(i.to_s) => i.to_s)
end
end
end
так что это работает нормально, но когда я запускаю приложение ruby on rails, я делаю:
BCrypt::Password.new(secret_code) == code.to_s
возвращаем false
code
является секретным кодом, который хэшируется, а secret_code
является зашифрованной версией
Любая помощь будет принята с благодарностью
спасибо