代码之家  ›  专栏  ›  技术社区  ›  Dan Sosedoff

使用用户密码对数据库数据进行加密的最佳方法是什么?

  •  4
  • Dan Sosedoff  · 技术社区  · 15 年前

    假设一个应用程序有真正属于用户的特定数据,除了所有者之外,没有人应该看到它。我使用MySQL数据库和DataMapper ORM映射器。应用程序是在Sinatra上用Ruby编写的。

    1. 用户注册一个帐户。创建用户名和密码。
    2. 登录到他的仪表板。
    3. 必须保护特定表中的某些字段。

    基本上,我在寻找模型属性的自动加密。像这样:

    class Transaction
      include DataMapper::Resource
    
      property :id, Serial
      property :value, String, :length => 1024, :encrypted => true
      ... etc ...
      belongs_to :user
    end
    

    有什么办法吗?

    7 回复  |  直到 14 年前
        1
  •  3
  •   No Refunds No Returns    15 年前

    我不会存储任何依赖于用户记住他们的密码然后使用密码来解密数据的数据。当用户更改密码时,您要做什么?解密/加密所有内容?我对此表示怀疑。如果管理员重置密码怎么办?所有数据丢失?我再次怀疑。

    请参阅有关存储机密的其他链接,但请不要将用户的任何值用作加密的一部分。

        2
  •  2
  •   DanSingerman    15 年前

    所以你想在数据库中存储加密的数据?首先,我想请您考虑一下为什么需要这样做?您应该能够编写应用程序,以便只有经过身份验证的用户才能访问自己的数据。

    如果您确实需要存储加密数据,也需要能够解密(而不是单向散列),那么ruby中有很多关于加密的内容: http://www.example-code.com/ruby/encryption.asp

        3
  •  1
  •   kirushik    15 年前

    你当然应该在用户端加密/解密数据,否则加密存储就没有意义了,因为私有数据的踪迹仍然存在于网络缓存、不同种类的交换文件中等等。此外,数据可以被中间人攻击嗅探。

    所以您可能想要的是基于javascript的客户端加密。这个话题在 http://javascript.about.com/library/blencrypt.htm http://www.movable-type.co.uk/scripts/aes.html

    您应该在提交表单之前加密数据(使用 onClick 回调“Submit”按钮f.e.),然后传递到服务器并照常处理。

    缺点是您不能将任何Rails用于这种只包含数据的客户端javascript。

        4
  •  1
  •   MatthewFord    15 年前

    为了加密敏感数据我不得不这么做。我包装了strongbox gem,它在github上: http://github.com/bitzesty/safe

    safe gem提供AR属性的公钥加密。

        5
  •  0
  •   Pistol    15 年前

    使用单向哈希算法。散列密码并存储哈希。然后,每当用户输入密码时,都要对输入的密码进行哈希处理,并将其与存储的哈希密码进行比较。如果他们是一样的,你就让他们通过。如果没有,他们会被拒绝。

        6
  •  0
  •   Crowe T. Robot    15 年前

    一般来说,存储用户的密码并不是一个好主意,因为它可以被转换成明文。

    通常它存储为MD5或SHA1的盐散列。

    所以,你有一个随机的salt,将它存储在用户的表中,然后对他们的pass和salt进行哈希处理,如下所示:

    $hash = md5(md5(salt) + pass)
    

    我建议不要存储可以返回的传递,我建议您存储它的唯一方法是使用单向散列。

    也就是说,有一些加密方案可以使用,比如RSA加密。这样,应用程序将使用您的公钥加密从最终用户收到的用户密码,当您需要解密时,请使用私钥进行解密。这种方式存储密钥的应用程序非常有限(例如自动提供登录到另一个站点的功能),而且通常是不受欢迎的。

        7
  •  0
  •   patie    10 年前

    attr峈encrypted也可以是加密敏感数据的解决方案,可以与ruby类或ActiveRecord、DataMapper或Rails中的Sequel一起使用。

    https://github.com/attr-encrypted/attr_encrypted