在我的最后一个问题“用于存储机密的便携式数据库”中,到目前为止,最好的答案告诉使用 sqlite-crypt。
阅读 sqlite-crypt 文档,打开数据库的新参数是密码。当然,我不想硬编码密码,所以我在想什么是存储密码的最佳、简单和快速的方法?
在我的最后一个问题“用于存储机密的便携式数据库”中,到目前为止,最好的答案告诉使用 sqlite-crypt。
阅读 sqlite-crypt 文档,打开数据库的新参数是密码。当然,我不想硬编码密码,所以我在想什么是存储密码的最佳、简单和快速的方法?
一些选项。
向用户询问密码(也就是他们记住一个密码以获取所有密码)(好主意)
在应用程序的第一次启动时创建一个密钥,然后以您自己独特的方式对其进行哈希处理(坏主意)
混合使用上述方法,也就是给用户一个或两个选项(记住我的密码复选框)
您必须将其存储在用户中。
否则,您只是用其他一些安全机制代替您要询问的安全机制...
大卫在评论 Infamy 的回答中的观点很好。应该允许一些灵活性,以防用户在较低层处理保护......所以,去投票给 Infamy。
硬编码在某些时候是不可避免的,除非密码只能交互使用。
在文件中有密码的情况下,您可以做的最好的事情是首先让访问它变得非常困难,然后限制如果有人找到它可以用它做什么。一条经验法则是,您不应该为存储在字符串中的密码提供比您必须在提示符下键入的密码更多的权限。
在 Windows 上,您可以/应该使用DPAPI,即提供存储加密的数据保护 API 。
它只是针对这种类型的问题。
存储的加密基于:
有一个与 Karl Franklin 合作的 dnrTV 节目,准确地展示了实现此功能和其他加密功能所需的内容。
该节目的源代码也可在页面上找到。
当然,还有很多关于这个主题的其他文章。