Database 如何保护存储在数据库中的合理密码

Database 如何保护存储在数据库中的合理密码,database,passwords,encryption,Database,Passwords,Encryption,我正在开发一个web应用程序,最终用户必须为其创建一个帐户。这一部分非常简单:我将使用SHA-256散列他们的密码,以便除了用户自己之外,没有人知道密码。现在是困难的部分。用户创建帐户后,必须提供其电子邮件服务器的密码。现在的问题是:我如何保护这个密码(密码将存储在数据库中)?如果我用三元组加密密码,任何开发人员或系统管理员都可以解密密码并查看它。处理这种问题的通常方法是什么?非常感谢。通常的方法是使用从用户密码派生的对称加密密钥。实现这一点的标准方法是使用中指定的算法,该算法生成一组加密安全的

我正在开发一个web应用程序,最终用户必须为其创建一个帐户。这一部分非常简单:我将使用SHA-256散列他们的密码,以便除了用户自己之外,没有人知道密码。现在是困难的部分。用户创建帐户后,必须提供其电子邮件服务器的密码。现在的问题是:我如何保护这个密码(密码将存储在数据库中)?如果我用三元组加密密码,任何开发人员或系统管理员都可以解密密码并查看它。处理这种问题的通常方法是什么?非常感谢。

通常的方法是使用从用户密码派生的对称加密密钥。实现这一点的标准方法是使用中指定的算法,该算法生成一组加密安全的字节,您可以将其用作密钥和IV。它可能受您的语言库的支持。例如,.NET,我使用的是具有类的


当然,当用户更改密码时,您必须解密任何现有密码文本,然后导出新密钥并重新加密。

开发人员不应访问生产数据库。您可能无法控制用户使用的电子邮件服务器,但在这种情况下,用户需要第二方(您)为了访问由第三方(用户的邮件服务器)托管的一些资源,而不必重新显示第三方密码,发明了3-legged-oauth。该类的链接为。警告:这意味着您需要将用户密码从客户端传输到服务器,因此连接必须是安全的。散列密码的优点之一是,您可以在客户端计算机上散列用户条目,然后仅将散列传输到服务器。但是,假设连接是安全的,blowdart的建议有一个巨大的优势,即为每个用户的数据使用不同的加密密钥,大大减少了泄露的威胁。通常,您将用户的密码从客户端传输到服务器,但一旦用户的密码到达服务器,您就对其进行散列以进行比较。因此,您要做的是在对密码检查进行哈希处理的同时,派生密钥并将其置于服务器上的会话状态,以便在整个用户会话中使用它。为什么要使用对称加密而不是加密哈希?在登录期间,您将重新刷新提供的输入,并将其与存储的salted散列进行比较;如果存在匹配项,则批准登录。然后系统管理员或开发人员不能解密用户的密码,但它可以更改;我没有仔细阅读,OP需要原始明文才能访问第三方帐户。别理我。