在 rails 上加密 ruby
Bcrypt ruby on rails
大家好,我是 rails 中的 Bcrypt 新手,我想知道如何正确使用这个 gem,截至目前,我能够对密码进行哈希处理,但在将其与用户进行比较时输入的密码不匹配。
这是我的加密和登录代码。
def self.login(user)
hashed_password = encrypt_password(user["password"])
result = User.where({:username => user["username"], :password => hashed_password})
return result
end
def self.add_user(user)
hashed_password = encrypt_password(user["password"])
result = User.create({:username => user["username"],
:password => hashed_password,
:firstname => user["firstname"],
:middle_initial => user["middle_initial"],
:lastname => user["lastname"],
:advisory_class => user["advisory_class"]})
return result
end
def self.encrypt_password(password)
password_salt = BCrypt::Engine.generate_salt
password_hash = BCrypt::Engine.hash_secret(password,password_salt)
end
在 add_user 中,当使用登录功能登录时,我使用 encrypt_password 功能对其进行了加密。密码与数据库中加密的密码不匹配。我确定我没有以正确的方式做这件事,你能指出我在哪里做错了吗?谢谢。
这里的技巧是 BCrypt 每次使用相同的密码 运行 时都会产生不同的结果。这使得函数的输出极其不可预测,因此暴力猜测密码是不切实际的。
您的验证方式是:
hashed_password = BCrypt::Password.create(user['password'])
您的验证方式是:
if @user = User.where(username: user['username'])
# User found
if BCrypt::Password.new(@user.password) == user['password']
# Success!
else
# Invalid password
end
else
# User not found
end
这是有效的,因为密码对象的 ==
方法被重写了。它没有进行文字字符串比较。
大家好,我是 rails 中的 Bcrypt 新手,我想知道如何正确使用这个 gem,截至目前,我能够对密码进行哈希处理,但在将其与用户进行比较时输入的密码不匹配。
这是我的加密和登录代码。
def self.login(user)
hashed_password = encrypt_password(user["password"])
result = User.where({:username => user["username"], :password => hashed_password})
return result
end
def self.add_user(user)
hashed_password = encrypt_password(user["password"])
result = User.create({:username => user["username"],
:password => hashed_password,
:firstname => user["firstname"],
:middle_initial => user["middle_initial"],
:lastname => user["lastname"],
:advisory_class => user["advisory_class"]})
return result
end
def self.encrypt_password(password)
password_salt = BCrypt::Engine.generate_salt
password_hash = BCrypt::Engine.hash_secret(password,password_salt)
end
在 add_user 中,当使用登录功能登录时,我使用 encrypt_password 功能对其进行了加密。密码与数据库中加密的密码不匹配。我确定我没有以正确的方式做这件事,你能指出我在哪里做错了吗?谢谢。
这里的技巧是 BCrypt 每次使用相同的密码 运行 时都会产生不同的结果。这使得函数的输出极其不可预测,因此暴力猜测密码是不切实际的。
您的验证方式是:
hashed_password = BCrypt::Password.create(user['password'])
您的验证方式是:
if @user = User.where(username: user['username'])
# User found
if BCrypt::Password.new(@user.password) == user['password']
# Success!
else
# Invalid password
end
else
# User not found
end
这是有效的,因为密码对象的 ==
方法被重写了。它没有进行文字字符串比较。