Ruby密码哈希

时间:2017-12-12 03:27:02

标签: ruby

我无法正确地为在临时网站上注册的新用户散列密码。用户具有用户名,密码和通过文件名加载并随后存储在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  

1 个答案:

答案 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

链接:https://github.com/codahale/bcrypt-ruby