如何在数据库中存储密码

时间:2011-11-09 13:08:11

标签: ruby-on-rails ruby security authentication passwords

  

可能重复:
  What is the best way to store password in database when API call requires sending of password in plain text?

我目前正在建立一个网站,它集成了Web上的许多服务,如Delicious,Zootool等。其中一些服务让我可以使用OAuth安全地连接它们。其他网站,例如Delicious,迫使我使用HTTP Auth与它们进行通信。

不幸的是,这意味着,我必须以可以恢复为纯文本的方式存储密码。也许使用我网站上的用户密码(哈希)进行加密会有效,但这意味着用户必须在密码更改后再次登录各种服务。

有关优雅解决方案的任何想法吗?

3 个答案:

答案 0 :(得分:0)

用户密码哈希在DB上是明确的,所以同样的问题。一种解决方案可能是使用您的站点用户密码加密第三方密码。当用户更改密码时,请询问他的旧密码和新密码。然后使用旧密码解密第三方密码并使用新密码加密它们。

只有在会话中将用户密码保存在任何其他变量上时,此功能才有效。

这样可以避免在db上保存清除密码,但内存中仍然有明确的密码。

答案 1 :(得分:0)

加密和解密数据。例如,使用buildin mysql aes / des方法。

确保您不将密钥存储在数据库中。

答案 2 :(得分:0)

确定为Mongoid创建了以下类:

class EncryptedString < String
  include Mongoid::Fields::Serializable

  def deserialize(value)
    Gibberish::AES.new(ENV['AES_KEY']).decrypt(value)
  end

  def serialize(value)
    Gibberish::AES.new(ENV['AES_KEY']).encrypt(value)
  end
end

我的模型代码如下所示:

class User
  include Mongoid::Document

  field :password, type: EncryptedString
end

有任何疑虑吗?

相关问题