加密SQL连接字符串c#

加密SQL连接字符串c#,c#,sql,encryption,connection-string,C#,Sql,Encryption,Connection String,我创建了一个c#应用程序(不是asp网页),它连接到sql 2005服务器。在我的源代码中,此sql server的密码和用户ID在ConnectionString中以纯文本编码 SqlConnection con = new SqlConnection(); con.ConnectionString = "Data Source=server1;"+ "Initial Catalog=mydatabase;"+ "Integrated S

我创建了一个c#应用程序(不是asp网页),它连接到sql 2005服务器。在我的源代码中,此sql server的密码和用户ID在ConnectionString中以纯文本编码

SqlConnection con = new SqlConnection();
con.ConnectionString = 
         "Data Source=server1;"+
         "Initial Catalog=mydatabase;"+
         "Integrated Security=no;"+
         "User ID=admin;Password=mypassword;";
con.Open();
有没有一种简单的方法可以加密密码或整个连接字符串,而其他人在拆解我的工具时却看不到密码


谢谢

您应该将连接字符串存储在配置文件中,并对该部分进行加密。请参阅或。

您可以使用与web.config相同的方式在app.config中进行操作。微软称之为。由于加密的数据和密钥都驻留在同一台机器上,这只会使获取数据变得更加困难,但从理论上讲,获取数据并非不可能。

不,您只能使其变得困难


最好让应用程序使用一个特殊的数据库登录,它只能访问必要的表/过程。

有两种方法:

1) 您可以使用配置安全部分加密和解密源代码中的连接冲突:

try
    {
        // Open the configuration file and retrieve 
        // the connectionStrings section.
        Configuration config = ConfigurationManager.
            OpenExeConfiguration(exeConfigName);

        ConnectionStringsSection section =
            config.GetSection("connectionStrings")
            as ConnectionStringsSection;

        if (section.SectionInformation.IsProtected)
        {
            // Remove encryption.
            section.SectionInformation.UnprotectSection();
        }
        else
        {
            // Encrypt the section.
            section.SectionInformation.ProtectSection(
                "DataProtectionConfigurationProvider");
        }
        // Save the current configuration.
        config.Save();

        Console.WriteLine("Protected={0}",
            section.SectionInformation.IsProtected);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
2) 您可以使用企业库数据访问应用程序块使用RSAPProtectedConfigurationProvider或DPAPIPProtectedConfigurationProvider执行加密


有关完整的文章,请转到-->

您也可以将用户名和密码存储在注册表中,而不是存储在配置文件中。尝试连接到数据库时,请从注册表读取用户名和密码。请记住,在注册表中存储时必须加密用户名和密码,在从注册表检索时必须解密用户名和密码。

谢谢,但我不知道如何实现这一点。我只是用我的c#项目创建了一个dll-没有exe和app.config?此外,此dll必须在不同的计算机和用户上使用!一种方法是,您可以创建一个XML文件并将您的设置存储在其中。然后,您可以将该XML保存在每个部署机器中的特定位置,然后您可以读取它。最好的技术之一是使用自定义配置管理器,即管理配置项的不同类库,您的主DLL将引用该类库,或者您可以使用企业库中的配置块。在注册表中存储纯文本信息与配置文件没有太大区别。只有当你考虑到你正在防范的威胁时,这才更像是一种安全感。如果他们已经有权访问该文件,他们很可能有权访问该注册表项。他们知道他们在寻找什么。但是OP明确声明“记住你必须加密用户名和密码”应用程序配置文件(app.config和web.config)是专门创建的,以包含此类信息。因此,使用这些文件管理用户/密码、连接字符串和所有其他应用程序设置比使用Windows注册表更高效、更简单。特别是在使用ASP.NET应用程序的服务器环境中。@CheshireCat更有效吗?依赖Windows注册表用于保存配置,就像过去的INI文件一样,*unix系统使用文件来保存配置,您可以通过查看*unix系统上的大量配置文件来选择。但按平台规范注册是保存桌面应用程序配置的更好地方。永远不要将敏感数据存储在配置文件中。注册表的安全性比文件好得多。复制注册表比复制文件要困难得多。存储在内存中远远超过任何一个。