1

所以,

我有一个存储密码的 mysql 表,这些密码不能被散列,因为我需要稍后将其恢复为纯文本。

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

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

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

4

3 回答 3

3

OpenSSL 是一个很好的起点。它支持大量可用于加密纯文本密码的安全加密算法。AES-256 或 Twofish 是很好的算法。3DES 也被认为足以满足当今的标准。

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

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

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

最重要的是,您必须在隐私政策中披露您可以存储加密形式的密码以用于 3rd 方服务。

希望有帮助。 OWASP可能有一些与您将要做的事情相关的其他有用信息。

于 2012-07-24T22:03:39.690 回答
2

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

并尝试一些openssl。

对于所有其他答案,我对它们有一些问题,而且很短的时间来解释原因。

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

于 2012-07-24T22:50:06.880 回答
0

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

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

于 2012-07-24T21:43:45.423 回答