加密实体框架中的ConnectionString(第一个代码)
本文关键字:第一个 代码 ConnectionString 实体 框架 加密 | 更新日期: 2023-09-27 18:19:42
如何保护我的连接字符串?我想在C#中使用实体框架4.1(第一个代码),但对我来说重要的是其他人看不到我的连接字符串。
使用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应用程序相同的工具。
在执行以下操作之前,请确保有备份!
- 请查看此处:"C:''Windows''Microsoft.NET''Framework",以获取您的版本或最新版本
- 打开您版本的文件夹
- 搜索"aspnet_regiis"
- 右键单击并选择属性,然后复制位置的路径
- 现在将项目中的"app.config"文件重命名为"web.config"(您可以在visualstudio中执行此操作)
- 打开命令提示符
- 键入'''aspnet_regiis-pef"connectionStrings"'
- 按回车键
- 它应该会给你一些类似"成功加密"之类的信息
- 现在,您可以将"web.config"文件重命名回"app.config"
现在,您可以查看app.config并查看连接字符串是否已加密。