我为 Windows 7 构建了自己的锁屏。因此,它使用密码来解锁自己。所以我决定只存储密码字符串的哈希码(例如,我调用字符串“Password123”的GetHashCode方法)。现在我有存储号码的任务。我将如何以最安全的方式执行此操作?还是使用密码字符串的哈希码是最好的方法?我的目标是阻止某人访问此号码,并最终阻止某人发现密码。
以下是我到目前为止想到的一些可能的方法:
- 将密码的哈希码与主程序一起存储在未加密的纯文本文件中。
- 将密码的哈希码与主程序一起存储在加密的文本文件中(这引入了存储和获取合适的加密 key 的问题)
- 将密码的哈希码存储在一个小型编译的 C# 库中。
- 如上操作,但对生成的程序集进行加密。然后,要加载它,只需将所有字节读入内存,解密,然后使用 Assembly.Load 加载原始字节数组。
现在有没有更好(更安全)的方法来阻止别人发现我试图存储在硬盘上的哈希码?
编辑:根据下面的评论,我正在对程序进行修补,以使用散列算法来获取密码的散列码。现在的问题是“我如何在硬盘驱动器上安全地存储字节数组?上面的所有选项仍然适用。
提前感谢您的帮助。
最佳答案
如果我对您的要求的理解正确,您希望保护您的桌面。只要有人需要做大量的工作来弄清楚它来自的密码,是否有人可以读取散列并不重要。因此,您需要的是像后来的 SHA 之一那样的体面的加密哈希算法。参见 [ https://en.wikipedia.org/wiki/One-way_function][1]请注意,即使您知道算法和所有存储的哈希值,也不应该能够按照相反的过程来恢复原始密码。
当然,强密码的所有常规准则仍然适用 - 最小长度、字母数字和非字母数字的混合等。
您也不希望有人能够随便删除或摆弄您的哈希值,因为这会将包括您在内的所有人都拒之门外,因此我会避免使用常规文件系统并建议在 CURRENT_USER 下注册。
关于C# 存储数字的安全方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41466204/