如何在C#中的connectionStrings Web.config / App.config中仅加密和解密密码?

时间:2015-10-27 06:32:59

标签: c# encryption configuration cryptography

我有一个控制台应用程序,我应该连接到SQL Server。它受密码保护。

我只需解密<connectionStrings>标签中的密码值,如

<add name="ConnectionStringname" 
     connectionString="Data Source=xx.x.x.xx;Initial Catalog=DbName;User ID=xxx;Password="DecryptedValueOfPasword" />

我尝试过这些方法,请让我知道哪一个是最好的或任何其他方法请告诉我。

方法1 :使用此命令加密和解密整个<connectionStrings>标记

aspnet_regiis -pef connectionStrings "app.config Path"

方法2 :加密和解密唯一的密码值

  • 步骤1:从自定义标记中添加的连接字符串和密码值中删除密码值。

    <add name="ConnectionStringname" 
          connectionString="Data Source=xx.x.x.xx;Initial Catalog=DbName;User ID=xxx;" />
    
  • 步骤2:使用RSA密钥解密自定义标签,即使用aspnet_regiis.exe命令。

  • 步骤3:在代码隐藏文件中,读取解密的密码值并在连接字符串中附加密码值

    <add name="ConnectionStringname" 
         connectionString="Data Source=xx.x.x.xx;Initial Catalog=DbName;User ID=xxx;Password="EncryptedValueOfPasword" />
    

方法3 :创建类库

    public class EncryptDecryptClass {
        public string Encrypt(string plainText)
        {
            if (plainText == null) 
                throw new ArgumentNullException("plainText");

            //encrypt data
            var data = Encoding.Unicode.GetBytes(plainText);
            byte[] encrypted = ProtectedData.Protect(data, null, Scope);

            //return as base64 string
            return Convert.ToBase64String(encrypted);
        }

        public string Decrypt(string cipher)
        {
            if (cipher == null) 
               throw new ArgumentNullException("cipher");

            //parse base64 string
            byte[] data = Convert.FromBase64String(cipher);

            //decrypt data
            byte[] decrypted = ProtectedData.Unprotect(data, null, Scope);
            return Encoding.Unicode.GetString(decrypted);
        }
    }

2 个答案:

答案 0 :(得分:1)

首先,我不明白为什么你只需要解密密码值?连接字符串的其他部分表示安全信息,如db name或user id。所以你必须加密整个连接字符串,而不仅仅是它的一部分。

方法1是最佳选择,因为它具有以下好处:

  1. 您不需要编写任何用于加密/解密的自定义代码。
  2. 您不需要修改代码,因为.net框架会自动解密连接字符串。
  3. 管理员可以通过运行aspnet_regiis -pd "connectionStrings"
  4. 来解密服务器框中的连接字符串
  5. 如果您有服务器场,则可以在服务器之间import/export RSA key container

答案 1 :(得分:0)

使用XML代替配置文件。将您的凭据存储在XML文件中并加密XML文件中的密码并从那里获取

<?xml version="1.0" encoding="utf-8" ?>
<Connections>
  <UserId>sa</UserId>
 <Password>DecryptedValueOfPasword</Password>
</Connectionstring>

如上所述