为什么app.config中的加密数据可以从另一个程序中读取

时间:2013-09-13 15:22:58

标签: c# encryption configurationmanager

我的ConnectionString文件中有App.Config,由DataProtectionConfigurationProvider提供商加密,一切正常解决方案A

然后我构建另一个解决方案(解决方案B)并将App.Config文件添加到其项目中。并尝试解密该配置文件,令人惊讶的是,一切正常!虽然我希望第二个解决方案无法解密ConnectionString 假设我部署了这个项目,并在安装时请求SqlConnection信息,如USERIDPASSWORD然后解密它们并将其放入App.Config文件中。一切都还好!但是,如果其他人尝试添加生成的App.Config文件(在最终用户计算机中)并解密我的ConnectionString会发生什么? 我们尝试加密这些数据,以便其他任何人(我们的程序除外)都无法触及数据。

  • 是否有人使用解决方案B 触摸我的数据?
  • 如果是这样,我该怎样做才能保证我的数据安全? ----------编辑------------
    顺便说一下,我正在使用用户级解密,而该项目是Windows应用程序而不是Web应用程序

2 个答案:

答案 0 :(得分:1)

加密密钥存储在机器级别或用户级别(我不确定您如何决定使用哪个),因此在同一台机器/用户上运行的任何程序都可以解密该字符串。

你正在使用错误的工具,DataProtectionConfigurationProvider是为了防止某人获取你的网站/程序的数据转储(它主要用于IIS),并能够使用不同的机器/用户连接到你的后面结束数据库。

不幸的是,我不知道“适合工作的工具”是什么。 “从用户运行的计算机上隐藏数据”非常困难。我可以提出的唯一建议是阅读this old question of mine,在那里我问一个类似于你的问题和this old answer of mine我回答有关人们黑客入侵/破解你的申请的问题。

答案 1 :(得分:1)

保护应用配置中的数据,如果您确实需要确定,则表示使用加密功能,使用特定于您应用的密钥,并将结果存储在配置设置中作为BASE64编码字符串。

在写入数据之前,您必须使用文本编码将文本转换为字节数组。然后,您加密该数组,然后将结果数组转换为base64编码的字符串,然后将其存储在配置中。

在检查数据之前,您必须解码base64编码,解密生成的信息(字节数组),然后使用相同的文本编码将字节数组转换为实际文本。

如果您真的想成为一只猪,可以使用不对称算法 - 使用私钥进行编码,使用公钥进行解码。这意味着配置数据不仅难以阅读,而且修改也是不可能的(因为你没有用你的应用程序给出私钥 - 只有公开的私钥)。