[ 来源:http://www.it55.com | 作者: | 时间:2007-08-03 | 收藏 | 推荐 ] 【大 中 小】
由于安全需要,我们发布的程序不应该将连接字符串直接暴露给终端用户,所以有必要对配置文件中的连接字符串加密。
45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn
这里简要介绍在安装程序中为连接字符串加密的方法(针对winform程序)。
首先,创建一个类库程序,名称为ClientInstallAction,新建类InstallAction.cs。代码如下。 免费资源www.it55.com
[RunInstaller(true)]
public class InstallAction : Installer
{
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
mEncryptConfig();
}
/// <summary>
/// 安装路径
/// </summary> www.it55.com
private string _installPath
{
get
{
return Context.Parameters["TARGETDIR"];
}
}
/// <summary>
/// 配置文件路径 configuration file path
/// </summary>
private string XmlPath
{
get
{
return Path.Combine(_installPath, @""); www.it55.com在线教程
}
}
private void mEncryptConfig()
{
XmlDocument doc = new XmlDocument();
doc.Load(XmlPath);
XmlNode connectionStringsNode = doc.SelectSingleNode("/configuration/connectionStrings");//查找connectionstring结点 www.it55.com
DESProtectedConfigurationProvider provider = new DESProtectedConfigurationProvider();
XmlElement newConnectionStringsNode = doc.CreateElement("EncryptedData");
newConnectionStringsNode.InnerXml = provider.Encrypt(connectionStringsNode).InnerXml;//加密字符串
connectionStringsNode.RemoveAll();
connectionStringsNode.AppendChild(newConnectionStringsNode as XmlNode);//删除并替换connectionstring结点 45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn
XmlAttribute configProtectionAtt = doc.CreateAttribute("configProtectionProvider");
configProtectionAtt.Value = "DESProtectedConfigurationProvider";
connectionStringsNode.Attributes.Append(configProtectionAtt);
doc.Save(XmlPath);
}
} 免费资源www.it55.com
然后创建用于加密解密的类DESProtectedConfigurationProvider.cs
www.it55.com在线教程
代码如下 www.it55.com
public class DESProtectedConfigurationProvider : ProtectedConfigurationProvider
{
//Set Key and IV
private byte[] desKey = { 23, 44, 54, 12, 42, 77, 45, 33 };
private byte[] desIV = { 39, 48, 5, 32, 55, 46, 30, 99 };
//Create DES provider
private DESCryptoServiceProvider mProvider = new DESCryptoServiceProvider(); www.it55.com在线教程
private string pName;
// Gets the provider name.
public override string Name
{
get { return pName; }
}
// Performs provider initialization.
public override void Initialize(string name,
NameValueCollection config)
(编辑:IT资讯之家 www.it55.com)