【问题标题】:How to Encrypt and Decrypt only password in connectionStrings Web.config/App.config in C#?如何在 C# 中的 connectionStrings Web.config/App.config 中仅加密和解密密码?
【发布时间】:2016-01-26 11:16:37
【问题描述】:

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

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

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

我已经尝试过这些方法,请告诉我哪种方法最好,或者任何其他方法请告诉我。

方法一:使用此命令加密和解密整个&lt;connectionStrings&gt;标签

aspnet_regiis -pef connectionStrings "app.config Path"

方法二:加密解密唯一的密码值

  • 第 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" />
    

方法三:创建类库

    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);
        }
    }

【问题讨论】:

    标签: c# encryption configuration cryptography


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。我只想解密密码值。如果我想解密 app.config 中的 connectionStrings 标记,请使用第一种方法,在执行命令后将 app.config 重命名为 web.config,然后再次将 web.config 重命名为 app.config。
    【解决方案2】:

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

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

    类似上面的东西

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      相关资源
      最近更新 更多