C#Winforms与Access DB的应用程序安全连接

时间:2012-06-03 12:34:32

标签: c# winforms desktop-application .net eazfuscator

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

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

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

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

以下是我的想法:

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

显然,如果用户忘记了密码,除了使用暴力外,绝对没有办法获得对数据库的访问权。

有没有办法将连接字符串中使用的密码存储在程序中,以便通过任何实际方法无法获取?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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