下面是“C# 数据库链接字符串加密解密工具代码详解”的完整攻略。
1. 什么是数据库链接字符串加密解密?
在 C# 中,我们经常需要连接数据库进行数据交互。而数据库连接字符串包含数据库服务器地址、登录名和密码等敏感信息,需要对其进行加密保护。数据库链接字符串加密解密就是为了保护这些敏感信息不被不良程序窃取。
2. 如何加密和解密数据库链接字符串?
C# 提供了 System.Configuration 命名空间下的 ProtectedConfiguration 类,该类提供了 Protect 和 UnProtect 方法用于加密和解密敏感信息。下面是加密和解密数据库链接字符串的示例代码:
using System;
using System.Configuration;
using System.Security.Cryptography;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var connStr = @"Data Source=.\SQLEXPRESS;Initial Catalog=TestDB;User ID=sa;Password=123456";
//加密链接字符串
var encryptedConnStr = Protect(connStr);
//解密链接字符串
var decryptedConnStr = Unprotect(encryptedConnStr);
Console.WriteLine($"加密前:{connStr}");
Console.WriteLine($"加密后:{encryptedConnStr}");
Console.WriteLine($"解密后:{decryptedConnStr}");
}
static string Protect(string input)
{
var bytes = System.Text.Encoding.Unicode.GetBytes(input);
var protectedBytes = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser);
return Convert.ToBase64String(protectedBytes);
}
static string Unprotect(string encryptedValue)
{
var bytes = Convert.FromBase64String(encryptedValue);
var unprotectedBytes = ProtectedData.Unprotect(bytes, null, DataProtectionScope.CurrentUser);
return System.Text.Encoding.Unicode.GetString(unprotectedBytes);
}
}
}
3. 实现敏感信息加密解密的工具类代码示例
下面是一个实现敏感信息加密解密的工具类代码示例:
using System.Configuration;
using System.Security.Cryptography;
using System.IO;
namespace Utils.Encryption
{
///<summary>
///Provides methods for encrypting and decrypting configuration section data.
///</summary>
public class ConfigurationEncryption
{
///<summary>
///Encrypts the configuration section protected with the DpapiProtectedConfigurationProvider.
///</summary>
///<param name="plainText">The plain text to encrypt.</param>
///<returns>The encrypted configuration section.</returns>
public static string Protect(string plainText)
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(plainText);
byte[] dpapiData = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);
return System.Convert.ToBase64String(dpapiData);
}
///<summary>
///Decrypts the configuration section protected with the DpapiProtectedConfigurationProvider.
///</summary>
///<param name="cipher">The encrypted configuration section to decrypt.</param>
///<returns>The decrypted configuration section.</returns>
public static string Unprotect(string cipher)
{
byte[] dpapiData = System.Convert.FromBase64String(cipher);
byte[] data = ProtectedData.Unprotect(dpapiData, null, DataProtectionScope.CurrentUser);
return System.Text.Encoding.UTF8.GetString(data);
}
}
}
这个代码示例是一个静态工具类,通过调用 Protect 和 Unprotect 方法分别对数据进行加密和解密,在使用过程中可以方便地调用这两个方法实现敏感信息的保护。
示例说明
下面是两个示例说明:
- 将应用程序的配置文件中的数据库链接字符串进行加密处理。
```csharp
using System.Configuration;
using Utils.Encryption;
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStrings = config.ConnectionStrings.ConnectionStrings;
foreach (var connectionStringSettings in connectionStrings)
{
connectionStringSettings.ConnectionString = ConfigurationEncryption.Protect(connectionStringSettings.ConnectionString);
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");
```
此示例通过对应用程序配置文件中的每个数据库链接字符串进行加密,保护敏感信息,防止恶意程序窃取。
- 在程序中使用解密后的链接字符串进行数据库连接。
```csharp
using System.Data.SqlClient;
using Utils.Encryption;
var encryptedConnStr = @"ENC:[vVv3tLgkLmvGZmGy/cToX06nZzncbQJsnZLB+wJrn0iiYg6fuc8sA9wXOxy6njVyitXN711HPRlZaDCnNSPBJxkqj2jgjJgHINiUJsWWEYeKe9FCQJwqlg==]";
var decryptedConnStr = ConfigurationEncryption.Unprotect(encryptedConnStr);
var conn = new SqlConnection(decryptedConnStr);
conn.Open();
```
此示例以加密后的链接字符串为输入,使用 ConfigurationEncryption.Unprotect 方法进行解密,得到连接数据库所需的链接字符串,再进行数据库连接。
总结
本文介绍了C# 数据库链接字符串加密解密工具代码,重点讲解了数据库链接字符串加密解密的方法和工具类的实现方式,并给出了两个示例说明该工具类的具体应用。这些内容对于保护敏感信息,增强应用程序的安全性具有重要意义。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 数据库链接字符串加密解密工具代码详解 - Python技术站