![](/img/trans.png)
[英]How To Encrypt ConnectionString for Entity Framework and Windows Forms
[英]Encrypt ConnectionString in entity framework (first code)
我如何保护我的连接字符串? 我想在C#中使用Entity framework 4.1(第一个代码),但对我来说很重要的是其他人看不到我的连接字符串。
使用EF或任何其他ORM没有区别,您可以使用加密连接字符串的标准方式并在调用EF Context的初始化之前解密它将自动发生。
您可以从Context Class(DBContext或IdentityDbContext,如果使用ASPNET标识)中阻止对连接字符串的调用,并修改返回的连接字符串。 在我的情况下,我选择只加密密码,而不是加密整个连接字符串。 您可以使用相同的方法来加密整个连接字符串。
注意:用于加密和解密的函数(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应用程序的相同工具。
在执行以下操作之前,请确保备份!
现在,您可以查看app.config并查看连接字符串是否已加密。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.