C#安全存储号码的方式?

时间:2017-01-04 14:27:07

标签: c# windows security hash

我为Windows 7构建了自己的锁屏。因此,它使用密码来解锁自己。所以我决定只存储密码字符串的哈希码(例如,我调用字符串的GetHashCode方法" Password123")。现在我有存储号码的任务。我怎样才能以最安全的方式做到这一点?或者使用密码字符串的哈希码,即使是最好的方法呢?我的目标是阻止某人访问此号码并最终阻止某人发现密码。

到目前为止,我已经提出了一些可行的方法:

  1. 将密码的哈希码存储在主程序旁边的未加密纯文本文件中。
  2. 将密码的哈希码存储在主程序旁边的加密文本文件中(这会引入存储和获取合适密钥进行加密的问题)
  3. 将密码的哈希码存储在一个小型编译的C#库中。
  4. 如上所述,但加密生成的程序集。然后,要加载它,只需将所有字节读入内存,解密,然后使用Assembly.Load加载原始字节数组。
  5. 现在有没有更好的(更安全的)方法让某人发现我试图存储在硬盘上的哈希码?

    编辑:根据下面的评论,我正在编写一个程序补丁,使用散列算法来获取密码的哈希码。现在问题是"我如何安全地在硬盘上存储一个字节数组?上述所有选项仍适用。

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的要求,则希望保护桌面。只要有人必须做大量工作来弄清楚哈希值来自何处的密码,是否有人就可以读取哈希值就不重要了。因此,您想要的是一种像后来的SHA一样不错的加密哈希算法。请参阅[https://en.wikipedia.org/wiki/One-way_function][1],并请注意,即使您同时知道算法和所有存储的哈希,也不应遵循相反的过程来恢复原始密码。

当然,所有有关强密码的常规准则仍然适用-最小长度,字母数字和非字母数字的混合等等。

您也不希望有人能够随便删除或摆弄哈希,因为那样会把包括您在内的所有人锁定在外面,所以我会避免使用常规文件系统,并建议在CURRENT_USER下使用注册表。