c# - ClickOnce 连接字符串加密

标签 c# winforms

我正在开发我的第一个真正的 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/

相关文章:

c# - 在 Silverlight 中为枚举定义扩展方法

c# - System.Windows.Forms.Timer 是否在与 UI 不同的线程上运行?

c# - 窗口状态最大化不起作用

c# - DataGridView 行在提交更改后仍然是脏的

c# - 如果它是销售收据的一部分,您如何从 Quickbooks 交易中找到付款行的 TxnLineID?

c# - 如何使用 C#/IHTMLDocument2 设置文本字段的值

c# - 如何在 C# 中绘制面板?

c# - msgbox C# 中的默认否

c# - 创建带有垃圾桶的拖放系统以移除对象

c# - 如何打开 WPF 内容流?