C# 存储数字的安全方式?

标签 c# windows security hash

我为 Windows 7 构建了自己的锁屏。因此,它使用密码来解锁自己。所以我决定只存储密码字符串的哈希码(例如,我调用字符串“Password123”的GetHashCode方法)。现在我有存储号码的任务。我将如何以最安全的方式执行此操作?还是使用密码字符串的哈希码是最好的方法?我的目标是阻止某人访问此号码,并最终阻止某人发现密码。

以下是我到目前为止想到的一些可能的方法:

  1. 将密码的哈希码与主程序一起存储在未加密的纯文本文件中。
  2. 将密码的哈希码与主程序一起存储在加密的文本文件中(这引入了存储和获取合适的加密 key 的问题)
  3. 将密码的哈希码存储在一个小型编译的 C# 库中。
  4. 如上操作,但对生成的程序集进行加密。然后,要加载它,只需将所有字节读入内存,解密,然后使用 Assembly.Load 加载原始字节数组。

现在有没有更好(更安全)的方法来阻止别人发现我试图存储在硬盘上的哈希码?

编辑:根据下面的评论,我正在对程序进行修补,以使用散列算法来获取密码的散列码。现在的问题是“我如何在硬盘驱动器上安全地存储字节数组?上面的所有选项仍然适用。

提前感谢您的帮助。

最佳答案

如果我对您的要求的理解正确,您希望保护您的桌面。只要有人需要做大量的工作来弄清楚它来自的密码,是否有人可以读取散列并不重要。因此,您需要的是像后来的 SHA 之一那样的体面的加密哈希算法。参见 [ https://en.wikipedia.org/wiki/One-way_function][1]请注意,即使您知道算法和所有存储的哈希值,也不应该能够按照相反的过程来恢复原始密码。

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

您也不希望有人能够随便删除或摆弄您的哈希值,因为这会将包括您在内的所有人都拒之门外,因此我会避免使用常规文件系统并建议在 CURRENT_USER 下注册。

关于C# 存储数字的安全方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41466204/

相关文章:

c# - Webrequest 不适用于带 SSL 的 IIS8

java - 如何分析文件 I/O?

java - 不为用户登录的第二个位置调用 JAAS CustomLoginModule

macos - 在 mac 应用程序中创建功能以覆盖用户安全设置

C# 读/写 XML 文件

c# - 如何在WPF/C#中将RichTextBox与字符串进行比较

python - 什么是更 Pythonic 的方法来测试我的部分代码?

c++ - 写网络使用程序应该用什么API?

java - JRuby DSL封装,排除标准库

c# - 使用异步模式时 WCF 连接数超过最大连接数