2012-03-24 88 views
2

我正在创建一个简单的日记应用程序。 我希望用户能够设置自定义启动密码。保护带有密码保护的密码/日记应用程序的窗体的最佳实践)?

但是最佳实践是什么?我在哪里安全地存储密码?我想最好是存储密码的散列 - 如何做到这一点?

将密码(或散列)存储在易读的XML文件中不是最好的选择吗?然后可以打开XML文件并删除哈希字符串,然后在应用程序加载时将不会有密码,对吧?

致以问候

+0

为什么你想要一个启动密码?保护日志文件的密码听起来像是一个更好的主意。通过密码保护日志文件,我的意思是使用PBKDF2从密码派生的密钥对其进行加密。 – CodesInChaos 2012-03-24 10:47:51

回答

0

是的,哈希密码是最好的选择。只要您向用户提供某种方式来检索密码,那么存储密码的位置并不重要(在大多数情况下)。例如,在启动时,用户创建他们的日志,因此他们输入的用户的密码被创建/散列。您还需要询问其他信息以及此类母亲的姓氏,第一只宠物等(用户知道的东西)。

即使有人删除散列,日志也会被锁定,您不应该简单地要求用户输入新日志。除非他们验证其他信息,否则用户不能进入。

您也可以使用用户可以在其他地方安全地存储的密钥(如USB驱动器上的文件)。你甚至可以进一步加密数据库本身。

很多方法可以做到这一点,但没有充分证明。

2

让我们来解决这个问题,希望阅读您的日记。你关于哈希的ansatz并不错,但是假设你定义了一个启动密码,并且我们将哈希存储到某个XML文件的密码中。什么阻止了我拆卸你的应用程序(如果我们正在考虑C#或任何JIT语言,这很容易实现),只需更改密码验证子例程以始终返回true

你需要的是实际期刊/页面的加密。请参阅answer to this SO question以获得完整的日志,这会损坏日记页面,以便以明文保存,而且在没有密码的情况下很难取回。

您现在也可以选择存储散列,并验证其对用户的有效性;因为打开每个日记页面仍然需要实际的密码。

编辑

SO answer甚至更​​好。两个版本都使用.NET框架的一部分RijndaelManaged class进行加密和解密。