加密用户数据以自动登录到第三方系统

时间:2013-10-30 05:58:31

标签: php mysql encryption password-encryption

我发现自己的情况是,我在网站上有一组用户,他们都存储了用户名和密码,允许他们通过SOAP自动访问第三方服务。这个想法是每个用户只需要登录主站点就可以使用各自存储的每个服务的用户信息来访问多个服务。我觉得这些数据应该在存储时在我的数据库中加密,然后在用户需要访问给定服务时传递给php / SOAP函数时自动解密。什么是实现这一目标的最佳方式?

我看过AES_ENCRYPT,但似乎加密和解密使用了一个必须存储在我的代码中的密钥,用纯文本...这似乎不是最明亮的要做的事。无论如何,这是我第一次出现这样的事情(如果你不知道的话);如果你能给我一些关于如何处理这个问题的建议,我真的很感激。

非常感谢提前

1 个答案:

答案 0 :(得分:2)

你偶然发现了加密数据库中数据的最大问题:

➽在哪里存放钥匙?

加密无法解决数据安全问题,只能将其“集中”到密钥上。无论您将密钥存储在何处,您的应用程序都必须能够解密数据,因此可以对攻击者进行解密。我知道这个问题有两种可能的解决方案:

  1. 尽可能安全地将钥匙放在一个安全的地方。这意味着,它肯定应放在服务器上不可访问的目录中的www-root目录之外。根据数据的重要性,您还可以考虑将加密外包给另一个专用服务器。
  2. 根本不存储密钥并从用户密码派生。这是唯一真正安全的方法,因为即使服务器也无法解密数据。缺点当然是用户每次使用您的服务时都需要输入密码。如果用户更改密码,则需要重新加密所有数据。如果用户忘记密码,则数据将丢失。
  3. P.S。我建议在存储到数据库之前对其进行加密,因为MySQL AES_ENCRYPT在没有IV的情况下使用ECB模式。这允许搜索某个值,但安全性较低(我很确定您不想通过密码搜索)。