我正在创建一个简单的日记应用。 我希望用户能够设置自定义启动密码。
但最佳做法是什么?我在哪里安全地存储密码?我想最好存储一个密码的哈希 - 怎么做?
将密码(或哈希)存储在易于阅读的XML文件中不是最佳选择吗?然后可以打开XML文件并删除哈希字符串,然后在应用程序加载时就没有密码了,对吗?
祝你好运
答案 0 :(得分:2)
让我们想要阅读你的期刊来解决这个问题。关于哈希的ansatz并不错,但假设您确实定义了启动密码,我们将哈希值存储在某个XML文件中的密码中。什么阻止我拆卸您的应用程序(如果我们考虑使用C#或任何JIT-ed语言,这特别容易)并且只是将密码验证子例程更改为始终返回true
?
您需要的是加密实际期刊/页面。请参阅answer to this SO question以查看破坏日记页面的完整例程,以便以明文保存,并且在没有密码的情况下很难检索。
您现在还可以选择存储哈希,并验证其对用户的有效性;因为打开每个期刊页面仍然需要实际密码。
修改强>
这SO answer甚至更好。两个版本都使用RijndaelManaged
class,它是.NET框架的一部分,用于加密和解密。
答案 1 :(得分:0)
是的,散列密码是最佳选择。只要您为用户提供某种方法来检索密码,在任何情况下存储密码都无关紧要(在大多数情况下)。例如,在启动时,用户创建他们的日志,因此创建/散列他们输入的用户的密码。您还需要询问其他信息,例如母亲的婚前姓,第一只宠物等(用户会知道的事情)。
即使有人删除了哈希,日记也会被锁定,您不应该只是要求用户提供新的日记。除非他们验证其他信息,否则用户无法进入。
您还可以使用用户可以在其他地方安全存储的密钥(例如USB驱动器上的文件)。您甚至可以进一步加密数据库本身。
有很多方法可以做到这一点,但没有完全证明。