我有有效的代码,可以对提供给方法的字符串进行加密和解密,并且当我存储用户输入的密码以方便以后使用时,这一切都很好。
但是我想做的是在应用程序配置文件中提供一个密码(加密),该密码允许用户从同一域中的SQL Server中提取数据。
因为我已将ProtectedData.Protect
与DataProtectionScope.CurrentUser
一起使用,所以它已使用我作为密钥进行了加密,这意味着用户无法解密此密钥,并且DataProtectionScope.LocalMachine
也不适用。
private static byte[] Entropy = { // Some arbitrary numbers };
public static string Encrypt(string _toEncrypt)
{
byte[] originalText = Encoding.Unicode.GetBytes(_toEncrypt);
byte[] EncryptedText = ProtectedData.Protect(originalText, Entropy, DataProtectionScope.CurrentUser);
return Convert.ToBase64String(EncryptedText);
}
public static string Decrypt(string _toDecrypt)
{
byte[] EncryptedText = Convert.FromBase64String(_toDecrypt);
byte[] OriginalText = ProtectedData.Unprotect(EncryptedText, Entropy, DataProtectionScope.CurrentUser);
return Encoding.Unicode.GetString(OriginalText);
}
还有另一种方法可以允许出于安全原因在需要时解密密码并以加密格式提供密码吗?
答案 0 :(得分:0)
由于您将app.config
用于配置文件,因此实际上可以使用aspnet_regiis
实用程序来加密文件的各个部分。
已经有一段时间了,但是如果您进行一些搜索(for example,互联网上就会有一些资源。但是,如果我没记错的话,这些步骤基本上是:
app.config
重命名为web.config
,因为
aspnet_regiis
仅适用于web.config
。aspnet_regiis -pef <the section you're encrypting> <path to your web.config>
。路径应该只是可以在其中找到配置文件的文件夹,不要包含web.config
。app.config
。这将需要在托管应用程序的服务器或计算机上运行。如果您的应用程序不是从单个服务器上运行,则事情变得更加复杂,因为您必须导出密钥并导入它运行到运行该应用程序的每台计算机上。 This article包含以下步骤:
- 创建计算机级RSA密钥容器(1个时间步)
- 导出自定义RSA加密密钥(1个时间步骤)
- 导入证书(1步-每台计算机)
- 向证书添加权限(1步-每台计算机)
- 加密配置部分
- 解密配置节
您实际上不需要在应用程序中进行任何特殊的解密。配置系统将自动为您处理。