2011-04-05 44 views

回答

11

设计默认使用BCrypt算法,该AFAIK不可解密。如果您需要能够解密密码,则需要使用其他算法,例如AES

有一个gem扩展了对Devise的AES支持。

注意:我已经以纯学术兴趣回答了这个问题。建议您继续使用BCrypt。我鼓励您谨慎行事,因为管理密码是危险的业务。

+7

一个人应该简单地,并且非常轻地强调永远 - 永远 - 我再说一遍,永远不会解密用户密码!就像你不解密用户的信用卡信息一样。您只需为它们提供一种方法,自己重置它。 – Ekampp 2012-03-30 21:22:01

+0

@Ekampp当您需要密码与IMAP等外部服务进行交互时,您将遇到无解密问题。当然,解决方案可能会使用证书进行oath2身份验证,但会增加很多开销。有时AES认证是有意义的。 – Donato 2016-09-20 21:20:50

0

我认为这些密码是一种加密方式:您可以输入用户提供的密码,对其进行加密并将其与数据库中加密的密码进行比较(如果匹配 - 成功尝试)。但是不可能对数据库中的数据进行加密,所以没有人可以获取所有密码。这是一项安全功能。

+0

你怎么做呢? – AnApprentice 2011-04-05 17:47:27

+0

做什么? – Zepplock 2011-04-05 17:49:41

0
class User < ActiveRecord::Base 

    devise :database_authenticatable... 

    def verify_password?(password) 
    encryptor_class = Devise::Encryptors.const_get(Devise.encryptor.to_s.classify) 
    encryptor_digest = encryptor_class.digest(password, Devise.stretches, self.password_salt, Devise.pepper) 
    encryptor_digest == self.encrypted_password 
    end 
end 
2

设计使用BCrypt。您需要修改USERS表中的encrypted_pa​​ssword字段并添加新的加密密码。

您可以生成这个网站新的加密密码: http://www.bcrypt-generator.com/