2012-05-10 56 views
0

你们会如何在MySQL数据库中存储在线密码管理器的密码?没什么大的,只有几个用户。我不能真的哈希他们或什么,因为它是不可逆转的权利?像KeePass这样的程序如何实现这一目标?我将如何存储密码管理器的密码?

在此先感谢!

+3

通常用户的密码在发送给您之前使用主密码进行加密;然后您将存储加密的密码并在请求时将其返回给用户:然后他们将使用主密码在自己的机器上解密。您从未处理过主密码或未加密的密码,因此完全无法访问您存储的基础密码。 – eggyal

+0

@eggyal我如何通过PHP来做到这一点?我知道我需要一个主密码,但如何使用此主密码来反转散列字符串? –

+0

好吧,如果你遵循我描述的模式,你将不会在PHP(这是服务器端)执行加密 - 你应该在客户端执行它。如果你的应用程序是基于网络的,你可以用Javascript来做(尽管你应该非常小心XSS和浏览器安全漏洞) - [斯坦福Javascript加密库](http://crypto.stanford.edu/sjcl/)是一个开始的好地方。 – eggyal

回答

3

升级到一个答案

一般用户的密码使用传输给你,密码管理前一主密码加密的;你可以存储这样的加密密码,并根据他们的请求将它们返回给用户:然后他们将使用他们的主密码在他们自己的机器上解密。您从未处理过主密码或未加密的密码,因此完全无法访问您存储的基础密码。

如果您的应用程序是基于Web的,你可以在Javascript中执行加密操作(虽然你应该很警惕XSS和浏览器安全漏洞) - 的Stanford Javascript Crypto Library是一个良好的开端。

+0

感谢这个快速&真棒的答案! –

-1

散列密码确实是不可逆的。但是,您正是因为这个原因哈希密码:

  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 

这就是说,这个问题很宽泛,可能会得到downvoted。你不是在问一个具体的问题,或者说你到目前为止所尝试过的。

+0

这不适用于密码管理器应用程序。 – eggyal

+0

我确实想要一个密码管理器应用程序,因此我需要知道存储什么密码。我需要它是可逆的。 –

+0

啊,我误解了你正在尝试的。这些加密方案更加激烈,我不知道它们。 –