0

ConnectionString我的文件中有一个App.ConfigDataProtectionConfigurationProvider提供商加密的文件,并且在解决方案 A中一切正常。

然后我构建另一个解决方案(解决方案 B)并将该App.Config文件添加到它的项目中。并尝试解密该配置文件,令人惊讶的是一切都很好!虽然我希望第二种解决方案无法解密ConnectionString.
假设我部署了这个项目,在安装时,询问SqlConnection信息,喜欢USERID然后PASSWORD解密它们并将其放入App.Config文件中。一切都还好!但是如果其他人尝试添加生成App.Config的文件(在最终用户机器中)并解密我的会发生ConnectionString什么?
我们尝试对此类数据进行加密,以使其他人(除了我们的程序)无法接触到数据。

  • 有人使用解决方案 B触摸我的数据是否合乎逻辑?
  • 如果是这样,我能做些什么来保证我的数据安全?
    ----------Editied ------------
    顺便说一句,我正在使用用户级解密,该项目是 Windows 应用程序而不是 Web 应用程序
4

2 回答 2

1

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

您使用了错误的工具来完成这项工作,DataProtectionConfigurationProvider 是为了防止有人获得您的网站/程序的数据转储(主要用于 IIS)并能够使用不同的机器/用户连接到您的后端数据库。

不幸的是,我不知道适合您的“工作的正确工具”是什么。“从用户正在运行的计算机上隐藏数据”非常困难。我能提出的唯一建议是阅读我的这个老问题,在那里我问了一个与你类似的问题,以及我的这个老答案,在那里我回答了一个关于人们黑客/破解你的应用程序的问题。

于 2013-09-13T15:30:11.780 回答
1

如果您真的想确定的话,保护您的应用配置中的数据意味着使用特定于您的应用的密钥进行加密,并将结果作为 BASE64 编码字符串存储在您的配置设置中。

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

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

如果你真的想成为一只猪,你可以使用不对称算法——用私钥编码,用公钥解码。这意味着不仅配置数据难以阅读,而且无法修改(因为您不会在应用程序中提供私钥 - 只有公钥)。

于 2013-09-13T15:55:56.250 回答