安全密码存储和恢复

时间:2012-07-24 21:39:58

标签: php ajax encryption hash openssl

所以,

我有一个存储密码的mysql表,这些密码不能进行哈希处理,因为我需要稍后将其恢复为纯文本。

我有一个javascript,它通过ajax / php从mysql数据库获取这些密码并将其发送到另一台将使用它进行身份验证的服务器,这就是为什么我需要在发送时以纯文本形式使用它们。

我知道有base64和其他加密alghorythms,但这是不安全的。

我找到的最佳解决方案是OpenSSL,但我不确定我是否走在正确的道路上。我呢?

3 个答案:

答案 0 :(得分:3)

OpenSSL是一个开始寻找的好地方。它支持大量安全加密算法,可用于加密纯文本密码。 AES-256或Twofish是开始研究的好算法。 3DES也被认为足以满足今天的标准。

为了获得良好的安全性,您需要使用不同的密钥加密每个用户的密码;也就是说,每个用户都有一个唯一的加密密钥,并且您不会对所有密码使用1个密钥。此可以是他们在您的网站上使用的用户密码的哈希,但通常用户密码不强,如果他们忘记了您的网站/服务的密码,那么他们也会失去加密键。

为了最大的安全性,您不应将加密密钥存储在任何位置。当用户使用其密码登录时,您可以根据密码在内存中生成加密密钥。理想情况下,它不仅仅是密码的哈希值,而是通过某种转换算法应用它们的密码。

如果这不是一个选项,那么您应该将加密密钥存储在与存储加密用户密码的服务器不同的物理服务器上。存储加密密钥的服务器应具有许多安全和访问控制功能,并且具有非常受控的数据库访问权限,因此几乎只有您的应用程序才能访问密钥。

除此之外,您必须在隐私政策中披露您可以存储其密码的加密形式,以便与第三方服务一起使用。

希望有所帮助。 OWASP可能会提供一些与您将要执行的操作相关的其他有用信息。

答案 1 :(得分:2)

感谢所有答案,我将使用此处描述的php加密方法:https://stackoverflow.com/a/6639179/1415262

并尝试一些openssl。

对于所有其他答案,我遇到了一些问题,而且时间很短,无法解释原因。

PS:我还不能投票,但特别要感谢@ drew010和@fabio:)

答案 2 :(得分:0)

我强烈建议您不要以明文存储密码,也不要生成某种从一台服务器传递到另一台服务器的一次性使用密钥。

所以服务器有一个链接到特定用户的密钥是唯一的,这个密钥也在服务器2上,这是传递的密钥。

相关问题