在我的Rails应用程序中,我会定期要求用户在一定程度的不活动后重新输入密码 - 例如在Linux上使用sudo。我的应用程序使用Authlogic进行身份验证和处理密码存储和加密。
我需要一些方法来加密用户输入的密码,使用完全相同的加密方案,Authlogic在验证密码时验证密码时使用加密密码。我需要1)加密用户输入的密码,2)在加密和用户存储在数据库中的加密密码之间进行字符串比较。
我应该在哪里放置执行此加密的方法?以下是一些想法:
创意1(在新的自定义模块中)
module PasswordCryption
include Authlogic::ActsAsAuthentic::Password
encrypt_password(password)
end
end
创意2(在用户模型中)
class User
acts_as_authentic <---- makes Authlogic password encryption functionality available
encrypt_password(password)
end
end
答案 0 :(得分:1)
Authlogic默认使用SHA512加密。线索是authlogic重复了hexdigest功能20次。这将解决您的问题:
digest = [raw_password, password_salt].join('')
crypted_password = 20.times { digest = Digest::SHA512.hexdigest(digest) }