我正在开发我的第一个真正的 WinForms 应用程序,我的老板要求我找出一种方法来加密 app.config 中的连接字符串。我已经阅读了有关连接字符串加密的其他问题中的一些建议,并且我认识到这不是解决安全/隐私问题的 Elixir 。我们考虑过编写 Web 服务来从数据库中检索数据,但这是一个非常小的项目,不幸的是目前不是优先考虑的事情。
编辑:我遗漏了我在州立机构(社区学院)工作的细节,因为我们正在使用州规定的私有(private)系统 ID 识别学生,我们需要以某种形式保护应用程序或时尚。学生可以输入他们的网络 ID 来表明自己的身份(无论如何我们都需要保护它,因为有些学生有限制令并且需要他们的大部分记录保密),但许多学生只知道他们的系统 ID(始终保密)。
无论如何,我们想让这个过程与 ClickOnce 部署一起工作,但是当我运行 ClickOnce 可执行文件时,我的加密过程使应用程序崩溃。这是我的加密代码(从 SO 上的另一个问题中提取):
public static void EncryptConfigSection(string sectionName)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection section = config.GetSection(sectionName);
if (section != null)
{
if (section.IsReadOnly() == false &&
section.SectionInformation.IsProtected == false)
{
section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
}
}
ConfigurationManager.RefreshSection(sectionName);
}
我从 Program.cs 中的 Main() 函数调用此函数,但我不确定这是否适合它。此外,虽然此函数正确加密了 app.config,但一旦我退出应用程序,app.config 就会解密。我觉得我错过了拼图的一部分(或者可能是一大片拼图)。
任何人都可以提供一些关于这些问题的见解吗?我想重申,我认识到 Web 服务是这里的最终目标,所以如果这不是使用 CLickOnce 可以解决的问题,那么我愿意建议我们现在优先编写 Web 服务。
最佳答案
你看过this topic了吗? ?它讨论了使用 DPAPI 设置客户端以便对字符串进行加密。我仍然会查看 Web 服务路由,而不是将加密或未加密的连接字符串嵌入到客户端应用程序中。如果您谈论的是域外的客户端应用程序(即非员工使用),则尤其如此。
关于c# - ClickOnce 连接字符串加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7571236/