如何加密Web.Config中的连接字符串

如何加密Web.Config中的连接字符串,第1张

一、如何对Web.config中数据库连接字符串进行加解密,避免明文方式。 1)概述:

Web.Config 中可以存储数据库连接语句,通常存于 <connectionString>配置节中,程序调用非常方便,但是在系统的应用过程中,利用明文存储这些敏感信息是不安全的,这就需要对配置信息进行加密,加密后即使攻击者获取了对配置文件的访问,也可以使攻击者难以获取对敏感信息的访问,从而改进应用程序的安全性。

使用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe) 加密或解密 Web 配置文件的各节。而在在处理 Web.config 文件时,ASP.NET 将自动解密已加密的配置元素。

要加密配置文件的内容, 通过Aspnet_regiis.exe 工具与 –pe 选项以及要加密的配置元素的名称一起使用,利用.NET Framework 提供的2种受保护配置程序来实现节点加解密:

名为DataProtectionConfigurationProvider的 DPAPIProtectedConfigurationProvider 实例使用 Windows 数据保护 API (DPAPI) 对数据进行加密和解密。

名为RsaProtectedConfigurationProvider的 RsaProtectedConfigurationProvider 实例使用 RSA 加密算法对数据进行加密和解密。该提供程序配置为默认提供程序

下面就这2中加密方式,分别进行举例如下:

2)使用DPAPIProtectedConfigurationProvider 来加解密配置节

利用aspnet_regiis -pef connectionStrings 对web.config 加密 在服务器命令提示符下,输入如下命令:

C:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pef connectionStrings D:\程序\某系统\EpointBid_HuiYuan –prov DataProtectionConfigurationProvider 正在加密配置节„ 成功!

-pef 指定两个参数:

这里 connectionStrings 是要进行加密的配置节,后面是具体的程序路径 这里 D:\程序\某系统\EpointBid_HuiYuan 是要加密的配置文件所在的物理目录。

-prov 表示使用哪个驱动来加密,一共有两个驱动可选,在类似于

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 的位置,我们可以找到 machine.config 文件,在其 configProtectedData 配置节,我们可以看到这两个驱动的名称,以及默认的驱动是哪一个。这两个驱动是 RsaProtectedConfigurationProvider(类名 RsaProtectedConfigurationProvider,详细 *** 作见下说明示例)和

DataProtectionConfigurationProvider(类名 DpapiProtectedConfigurationProvider)。

如果不加驱动选项,则采用默认驱动进行加密。

我来回答吧: 不懂可以Hi,我一般都是这么做的

先给你个加密和解密类

告诉你个加密 解密类。

using System

using System.IO

using System.Security.Cryptography

namespace CryptInfoNameSpace

{

class CryptInfo

{

//加密

public static string Encrypt(string text)

{

Rijndael crypt=Rijndael.Create()

byte[] key=new byte[32]{0XA6,0X7D,0XE1,0X3F,0X35,0X0E,0XE1,0XA9,0X83,0XA5,0X62,0XAA,0X7A,0XAE,0X79,0X98,

0XA7,0X33,0X49,0XFF,0XE6,0XAE,0XBF,0X8D,0X8D,0X20,0X8A,0X49,0X31,0X3A,0X12,0X40}

byte[] iv=new byte[16]{0XF8,0X8B,0X01,0XFB,0X08,0X85,0X9A,0XA4,0XBE,0X45,0X28,0X56,0X03,0X42,0XF6,0X19}

crypt.Key=key

crypt.IV=iv

MemoryStream ms=new MemoryStream()

ICryptoTransform transformEncode=new ToBase64Transform()

//Base64编码

CryptoStream csEncode=new CryptoStream(ms,transformEncode,CryptoStreamMode.Write)

CryptoStream csEncrypt=new CryptoStream(csEncode,crypt.CreateEncryptor(),CryptoStreamMode.Write)

System.Text.UTF8Encoding enc=new System.Text.UTF8Encoding()

byte[] rawData=enc.GetBytes(text)

csEncrypt.Write(rawData,0,rawData.Length)

csEncrypt.FlushFinalBlock()

byte[] encryptedData=new byte[ms.Length]

ms.Position=0

ms.Read(encryptedData,0,(int)ms.Length)

return enc.GetString(encryptedData)

}

//解密,加密解密中的 byte[] key,byte[] iv可以自行修改,加密解密的 数组值一定一致,否则无法对应加密 解密。

public static string Decrypt(string text)

{

Rijndael crypt=Rijndael.Create()

byte[] key=new byte[32]{0XA6,0X7D,0XE1,0X3F,0X35,0X0E,0XE1,0XA9,0X83,0XA5,0X62,0XAA,0X7A,0XAE,0X79,0X98,

0XA7,0X33,0X49,0XFF,0XE6,0XAE,0XBF,0X8D,0X8D,0X20,0X8A,0X49,0X31,0X3A,0X12,0X40}

byte[] iv=new byte[16]{0XF8,0X8B,0X01,0XFB,0X08,0X85,0X9A,0XA4,0XBE,0X45,0X28,0X56,0X03,0X42,0XF6,0X19}

crypt.Key=key

crypt.IV=iv

MemoryStream ms=new MemoryStream()

CryptoStream csDecrypt=new CryptoStream(ms,crypt.CreateDecryptor(),CryptoStreamMode.Write)

ICryptoTransform transformDecode=new FromBase64Transform()

CryptoStream csDecode=new CryptoStream(csDecrypt,transformDecode,CryptoStreamMode.Write)

System.Text.UTF8Encoding enc=new System.Text.UTF8Encoding()

byte[] rawData=enc.GetBytes(text)

csDecode.Write(rawData,0,rawData.Length)

csDecode.FlushFinalBlock()

byte[] decryptedData=new byte[ms.Length]

ms.Position=0

ms.Read(decryptedData,0,(int)ms.Length)

return(enc.GetString(decryptedData))

}

}

}

在项目中 引用该类,

下面个思路:

把数据连接字符串 ,经过CryptInfoNameSpace.CryptInfo.Encrypt(string text)加密后 ,写入配置文件inf 或者 配置文件txt文件。

当执行Main函数时,读取配置文件,(如果配置文件不存在,或者读取错误, 重新加密的数据库连接字符串加密后写入配置文件)。然后通过函数 CryptInfoNameSpace.CryptInfo.Decrypt(string text)方法解密成原文连接字符串,并传递给其他类使用。即可。

最基本的做法就是使用加密工具,先把字符串加密,之后用配置文件的方法,添加到你的项目中;

然后通过程序的运行,动态的将加密过的字符串进行逆转 *** 作,恢复成123456,你需要考虑的是,哪种加密方式可以逆反 *** 作,MD5这样的方式似乎只能进行单向的加密,其实,加密方式也就是一个计算的过程。

希望可以帮助到你~!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9893570.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存