【问题标题】:Advice in storing sensitive data in Windows Form Application vb.net c#在 Windows 窗体应用程序 vb.net c# 中存储敏感数据的建议
【发布时间】:2016-09-28 05:22:33
【问题描述】:

我目前正在处理一个 Windows 应用程序项目,我在保护数据方面遇到了两个问题。

首先,我需要制作一个将密码存储为字符串的文件,用户每次加载主表单时都应输入该密码,我尝试了很多方法,但每个方法都有问题:

  1. 对字符串进行哈希处理并将其保存在文件中,因此每次用户输入密码时,输入的密码都会被哈希处理并与哈希处理后的字符串进行比较

    问题: 反编译应用程序让任何人都可以看到哈希方法和文件位置,因此他/她可以创建具有任何字符串哈希值(如 0000)的文本文件,并将该文件替换为我的应用程序文件,然后使用 0000 打开应用程序

  2. 使用带有自定义加密密钥的加密算法

    问题:反编译后可以访问key


另一个问题是应用程序中使用的在线 MySql 数据库的连接字符串,但我不希望任何用户看到连接字符串:

  1. 使用 DataProtectionConfigurationProvider 加密连接字符串

    问题:其他机器无法解密使用字符串

  2. 加密连接字符串并将其保存在文件中,并在应用程序加载时解密并使用该文件

    问题:从源码反编译后可以知道解密方法

除了混淆源代码之外,我还能使用吗? 我的意思是将这些敏感数据存储在只能由我的应用程序读取/写入的文件中

请随时就我的问题写下任何建议,并提前致谢

【问题讨论】:

  • 请一次问一个问题。
  • 好的,很抱歉,这是我在stackoverflow中的第一个问题
  • 在这种情况下,请阅读How to ask?,也请阅读Tour
  • 尝试在具有只读权限的网络中使用散列密码保存文件。
  • 使用 Windows 内置 DPAPI(数据保护 API)存储密码怎么样?

标签: c# vb.net winforms encryption connection-string


【解决方案1】:

尝试在具有只读权限的网络中使用散列密码保存文件。或者使用使用非管理代码(c++)编写的dll

【讨论】:

  • 此外,如果您的密码文件被锁定,您可以使用非对称密钥。在这种情况下,您使用您的密钥加密文件,而应用程序使用另一个密钥解密。这将提供大约 100% 的保护。但仅在用户无法添加/修改密码的非常特殊的情况下。例如,当它不是密码而是许可证密钥时。
  • 会怎样?为什么用户不能添加/修改密码?我知道非对称加密,但我认为我不太了解你,你能解释一下吗?请
  • 另一种方式:对密码文件进行数字签名。签名时使用程序集的哈希。并将此哈希存储为安全字符串。还有像#if RELEASE 这样的东西来防止调试。所以可以看到程序的代码,但制作一个假文件会困难得多。
  • 签署文件并不会使它成为我所知道的只读文件,因此它不会解决问题。无论如何,使用 C++ dll 是解决这个问题的最完美的解决方案,我很满意
猜你喜欢
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2010-09-20
相关资源
最近更新 更多