加密实体框架中的ConnectionString(第一个代码)

本文关键字:第一个 代码 ConnectionString 实体 框架 加密 | 更新日期: 2023-09-27 18:19:42

如何保护我的连接字符串?我想在C#中使用实体框架4.1(第一个代码),但对我来说重要的是其他人看不到我的连接字符串。

加密实体框架中的ConnectionString(第一个代码)

使用EF或任何其他ORM没有区别,您可以使用标准的方式加密连接字符串并在调用EF之前对其进行解密。上下文的初始化将自动发生。

  • 加密和解密配置节
  • 使用ASP.NET对web.config中的配置节进行编程加密和解密
  • 如何使用DPAPI加密ASP.NET 2.0中的配置节
  • 如何:使用RSA加密ASP.NET 2.0中的配置节

您可以从上下文类(如果使用ASPNET标识,则为DBContext或IdentityDbContext)停止对连接字符串的调用,并修改返回的连接字符串。在我的情况下,我没有加密整个连接字符串,而是选择只加密密码。您可以使用相同的方法来加密整个连接字符串。

注意:用于加密和解密的函数(StringCipher.Decrypt)来自这个线程->https://stackoverflow.com/a/1344255/1390025

这是您阻止对连接字符串的调用的位置

        public YourDB()
        : base(GetSqlConnection("DefaultConnection"))
    {}

在上面的场景中,我从app.config或web.config获取连接字符串。但是,根据您的请求,您可以加密整个连接字符串,如下例所示;

public YourDB()
        : base(StringCipher.Decrypt("your-encrypted-connection-string", "passphrase-used-to-encrypt"))
    {}

在只加密密码的情况下,下面的函数将加密的密码替换为纯文本,并返回连接字符串;

        public static string GetSqlConnection(string connectionStringName = "DefaultConnection")
    {
        // optionally defaults to "DefaultConnection" if no connection string name is inputted
        string connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
        string passPhrase = "passphrase-used-to-encrypt";
        // decrypt password
        string password = get_prase_after_word(connectionString, "password=", ";");
        connectionString = connectionString.Replace(password, StringCipher.Decrypt(password, passPhrase));
        return connectionString;
    }

用于解析连接字符串中的密码的函数

        public static string get_prase_after_word(string search_string_in, string word_before_in, string word_after_in)
    {
        int myStartPos = 0;
        string myWorkString = "";
        // get position where phrase "word_before_in" ends
        if (!string.IsNullOrEmpty(word_before_in))
        {
            myStartPos = search_string_in.ToLower().IndexOf(word_before_in) + word_before_in.Length;
            // extract remaining text
            myWorkString = search_string_in.Substring(myStartPos, search_string_in.Length - myStartPos).Trim();
            if (!string.IsNullOrEmpty(word_after_in))
            {
                // get position where phrase starts in the working string
                myWorkString = myWorkString.Substring(0, myWorkString.IndexOf(word_after_in)).Trim();
            }
        }
        else
        {
            myWorkString = string.Empty;
        }
        return myWorkString.Trim();
    }

您可以使用与asp.net应用程序相同的工具。

在执行以下操作之前,请确保有备份!

  1. 请查看此处:"C:''Windows''Microsoft.NET''Framework",以获取您的版本或最新版本
  2. 打开您版本的文件夹
  3. 搜索"aspnet_regiis"
  4. 右键单击并选择属性,然后复制位置的路径
  5. 现在将项目中的"app.config"文件重命名为"web.config"(您可以在visualstudio中执行此操作)
  6. 打开命令提示符
  7. 键入'''aspnet_regiis-pef"connectionStrings"'
  8. 按回车键
  9. 它应该会给你一些类似"成功加密"之类的信息
  10. 现在,您可以将"web.config"文件重命名回"app.config"

现在,您可以查看app.config并查看连接字符串是否已加密。