我应该如何检查Ruby中的密码?

时间:2015-04-24 12:55:19

标签: ruby

我使用Ruby来管理数据库中的用户。

我在使用pass = Digest::MD5.hexdigest()加密密码之前将其加密到数据库中。

我需要创建一个函数来检查给定的密码是否与数据库中存储的密码相匹配,但我不知道该怎么做。

我是否在用户提供的密码上使用pass = Digest::MD5.hexdigest(),然后根据数据库返回的内容进行检查?

这是correctpassword?

 def correctpassword?(nick, pass)
  user = nick
  pass = Digest::MD5.hexdigest(pass)

  db = SQLite3::Database.new "database.db"
  db.execute("SELECT * FROM t1 WHERE user = ? and pass = ?", user, pass)

  !results.empty?
 end

这是在尝试使用correctpassword?

  if clt.registered?(@nick)
   if clt.correctpassword?(@nick, @pass)
    sv_send 'NOTICE', @nick, ":Correct password."
   else
    sv_send 'NOTICE', @nick, ":Incorrect password."
   end
  end

我没有看到任何通知。使用correctpassword?似乎打破了局面。

但这有效:

  if clt.registered?(@nick)
    sv_send 'NOTICE', @nick, ":This account is registered."
  end

2 个答案:

答案 0 :(得分:0)

MD5 one-way哈希加密算法。无法直接解密MD5哈希。算法本身使用模运算来打包序列化的字符串,没有办法从那里倒退。

所以我认为您应该将密码转换为用户尝试输入的MD5,并将该哈希与db中存储的加密密码进行比较。

<强>例如

 > stored_password_in_db = Digest::MD5.hexdigest('gagan')
 #=> "cc18a19beff0bdf874861a4dae6124b6" 
 > user_enter_password_for_login =  Digest::MD5.hexdigest('gagan')
 #=> "cc18a19beff0bdf874861a4dae6124b6" 
 > stored_password_in_db == user_enter_password_for_login
 #=> true 
 > user_enter_password_for_login =  Digest::MD5.hexdigest('Gagan')
 #=> "f52bb23033354697e8f55abdaed9d94f" 
 > stored_password_in_db == user_enter_password_for_login
 #=> false 

答案 1 :(得分:0)

没有结果var的分配。做results = db.execute("SELECT * FROM t1 WHERE user = ? and pass = ?", user, pass)