我将构建一个小型Web应用程序,它将一些加密数据存储在数据库(sqlite)中。由于显而易见的原因,一个必要条件是不以保持加密密钥和数据库文件。
因此,该方法可以是用户在登录屏幕上提供的密码短语,然后从中导出密钥以加密数据。当然,传输将通过SSL保护。
问题是,由于用户的预期行为是仅输入密码短语(例如,在登录时),并且每次他点击链接时都不会被询问,密码必须存放在某个地方,至少暂时......但是,在哪里?
将它保存在PHP会话变量中是个好主意吗? ...它将被写入服务器端的磁盘。
将它保留在客户端更好(或更糟)吗?丢弃cookie,我不知道它是否可能,也许Ajax会有所帮助?
无论如何,您认为哪个是解决此问题的最佳方法?
感谢。
答案 0 :(得分:4)
您要查找的算法称为PBKDF2。它从密码中获取加密密钥。
您可能希望将派生密钥存储在非磁盘支持的ram中,例如分布式缓存。
答案 1 :(得分:2)
首先,您应该找到一致的算法来从密码或密码短语生成密钥。你可以拿出自己的,但我建议你查看以下算法,
您无需编写代码即可执行此操作。您可以在大多数流行的平台上找到这些实现,C / Java / C#等。
其次,您需要进行身份验证会话。否则,您无法知道谁在点击链接。
然后,您需要使用登录会话数据存储密钥。这可以在数据库,PHP会话中,甚至在cookie中,如果它已正确加密。