【问题标题】:How would I store passwords for a Password Manager?如何存储密码管理器的密码?
【发布时间】:2012-05-19 08:47:00
【问题描述】:

你们将如何在 MySQL 数据库中存储在线密码管理器的密码?没什么大不了的,只是几个用户。我不能真正散列它们或其他东西,因为它是不可逆转的,对吗? KeePass 之类的程序是如何实现这一点的?

提前致谢!

【问题讨论】:

  • 通常用户的密码在传输给您之前使用主密码进行加密;然后,您将存储加密的密码并根据用户的请求将其返回给用户:然后他们将使用他们的主密码在自己的机器上解密。您在任何时候都不会处理主密码或未加密的密码,因此您完全无法访问您存储的底层密码。
  • @eggyal 我将如何通过 PHP 做到这一点?我知道我需要一个主密码,但是如何用这个主密码反转一个散列字符串?
  • 好吧,如果您遵循我描述的模式,您将不会在 PHP(这是服务器端)中执行加密 - 您应该在客户端执行。如果您的应用程序是基于 Web 的,您可以使用 Javascript 来完成(尽管您应该非常警惕 XSS 和浏览器安全漏洞) - Stanford Javascript Crypto Library 是一个很好的起点。
  • 啊,现在我重新读了一遍,我明白你的意思了。尽管我是一名新手程序员(并且是 StackOverflow 的新手),但我会研究 Crypto Library,并且可能需要一段时间才能发现我将如何做到这一点。无论如何,谢谢你的回答!我无法将 cmets 设置为接受的答案,那么我现在需要做什么?
  • 我已经发布了答案。 :)

标签: mysql passwords


【解决方案1】:

升级到答案

通常用户的密码在传输给您(密码管理器)之前使用主密码进行加密;您将存储此类加密密码并根据用户的请求将其返回给用户:然后他们将使用他们的主密码在自己的机器上解密。您在任何时候都不会处理主密码或未加密的密码,因此您完全无法访问您存储的底层密码。

如果您的应用程序是基于 Web 的,您可以在 Javascript 中执行加密操作(尽管您应该非常警惕 XSS 和浏览器安全漏洞) - Stanford Javascript Crypto Library 是一个很好的起点。

【讨论】:

  • 感谢您提供快速而精彩的回答!
【解决方案2】:

散列密码确实是不可逆的。但是您正是出于这个原因散列了密码:

  1. 散列密码。插入数据库。
  2. 用户尝试登录,提供密码。用户提供的密码经过哈希处理。如果它与数据库中的内容匹配,则对用户进行身份验证。

程序通常提供以下内容:

setPassword(user, password); //puts the (hashed) password into a database table associated with user
authenticate(user, password); //for given user, checks to see if password is valid

也就是说,这个问题非常广泛,很可能会被否决。你不是在问一个具体的问题,也不是在说你到目前为止所做的尝试。

【讨论】:

  • 这不太适用于密码管理器应用程序。
  • 我确实想要一个密码管理器应用程序,因此我需要知道存储了哪些密码。我需要它是可逆的。
  • 啊,我误解了你的意图。为此的加密方案要激烈得多,我不知道它们。
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2021-01-04
  • 2019-01-20
  • 2010-11-19
  • 1970-01-01
相关资源
最近更新 更多