使用用户提供的密码进行数据库加密

时间:2009-11-28 22:40:09

标签: encryption

我将构建一个小型Web应用程序,它将一些加密数据存储在数据库(sqlite)中。由于显而易见的原因,一个必要条件是以保持加密密钥和数据库文件。

因此,该方法可以是用户在登录屏幕上提供的密码短语,然后从中导出密钥以加密数据。当然,传输将通过SSL保护。

问题是,由于用户的预期行为是仅输入密码短语(例如,在登录时),并且每次他点击链接时都不会被询问,密码必须存放在某个地方,至少暂时......但是,在哪里?

将它保存在PHP会话变量中是个好主意吗? ...它将被写入服务器端的磁盘。

将它保留在客户端更好(或更糟)吗?丢弃cookie,我不知道它是否可能,也许Ajax会有所帮助?

无论如何,您认为哪个是解决此问题的最佳方法?

感谢。

2 个答案:

答案 0 :(得分:4)

您要查找的算法称为PBKDF2。它从密码中获取加密密钥。

您可能希望将派生密钥存储在非磁盘支持的ram中,例如分布式缓存。

答案 1 :(得分:2)

首先,您应该找到一致的算法来从密码或密码短语生成密钥。你可以拿出自己的,但我建议你查看以下算法,

  1. PBE(基于密码的加密),与PKCS#7中使用的一样。
  2. Kerberos字符串到密钥的功能。
  3. 您无需编写代码即可执行此操作。您可以在大多数流行的平台上找到这些实现,C / Java / C#等。

    其次,您需要进行身份验证会话。否则,您无法知道谁在点击链接。

    然后,您需要使用登录会话数据存储密钥。这可以在数据库,PHP会话中,甚至在cookie中,如果它已正确加密。