我有一个控制台应用程序,我应该连接到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);
}
}
答案 0 :(得分:1)
首先,我不明白为什么你只需要解密密码值?连接字符串的其他部分表示安全信息,如db name或user id。所以你必须加密整个连接字符串,而不仅仅是它的一部分。
方法1是最佳选择,因为它具有以下好处:
aspnet_regiis -pd "connectionStrings"
答案 1 :(得分:0)
使用XML代替配置文件。将您的凭据存储在XML文件中并加密XML文件中的密码并从那里获取
<?xml version="1.0" encoding="utf-8" ?>
<Connections>
<UserId>sa</UserId>
<Password>DecryptedValueOfPasword</Password>
</Connectionstring>
如上所述