我使用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
答案 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)