我无法正确地为在临时网站上注册的新用户散列密码。用户具有用户名,密码和通过文件名加载并随后存储在SQL数据库中的头像。任何帮助将不胜感激。
这是我的代码:
def register(user, filename, file, password, confirm)
if(password != confirm) then return false end
if(not_found(user) == user)
user = html_clean(user)
password = html_clean(password)
upload_file(filename, file)
n = SecureRandom.hex
p = password + n
hashed = Digest::SHA256.hexdigest p
@db.prepare("INSERT INTO Users VALUES(?,?,#{filename},
{n}\")").execute([user,hashed])
end
true
end
答案 0 :(得分:2)
使用bcrypt
进行密码存储,哈希验证。
使用BCrypt进行密码散列相比内置的Digest类有几个优点。它也是内置的安全性。密码会自动加密。此外,BCrypt的参数成本会以指数方式缩放计算时间。
gem install bcrypt
一个例子:
require 'bcrypt'
class User < ActiveRecord::Base
# users.password_hash in the database is a :string
include BCrypt
def password
@password ||= Password.new(password_hash)
end
def password=(new_password)
@password = Password.create(new_password)
self.password_hash = @password
end
end
def create
@user = User.new(params[:user])
@user.password = params[:password]
@user.save!
end
def login
@user = User.find_by_email(params[:email])
if @user.password == params[:password]
give_token
else
redirect_to home_url
end
end