1

我有一个 C# 2010 Winforms应用程序,它使用 OleDb 连接到受密码保护的 Access 2010 数据库。这不是在线申请!

我目前将密码以纯文本形式存储在连接字符串中[我知道这非常不安全],它使用Eazfuscator.NET进行了混淆。我对一种以无法通过反编译或任何其他实用方法获取密码的方式安全存储密码的方法感兴趣。

我知道有一些方法可以通过加密 app/web.config 中的连接字符串来为 ASP.NET 应用程序执行此操作,但它对我不起作用,因为我的应用程序是桌面应用程序。

到目前为止,我还没有找到任何方法来实现这一点。

这是我想做的事情:

向用户请求密码,因为只有一个用户可以访问数据库。获取输入密码的哈希(SHA1 / SHA512),从哈希中选择一定数量的字符,对其进行加盐,将其添加到连接字符串并尝试连接。

显然,如果用户忘记了密码,除了使用暴力破解之外,绝对没有其他方法可以访问数据库。

有没有办法将连接字符串中使用的密码存储在程序中,从而无法通过任何实际手段获得?

4

2 回答 2

1

您应该为数据库生成一个长的随机安全密码,然后使用ProtectedData该类对其进行加密。
这将使用用户的 Windows 登录密码对其进行加密,因此除非用户登录,否则阅读它是不切实际的。

于 2012-06-03T12:37:59.123 回答
0

您可以使用 DSN 并将用户名和密码存储在那里,而不是在应用程序中,但是任何知道 DSN 的应用程序都可以使用数据库,并且凭据以纯文本形式在注册表中可用。

你想防御什么,应用程序进入野外?数据库?未经授权的用户坐在机器旁?密码必须在某个地方...

于 2012-06-03T13:05:44.580 回答