C# 数据库链接字符串加密解密工具代码详解

yizhihongxing

下面是“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 方法分别对数据进行加密和解密,在使用过程中可以方便地调用这两个方法实现敏感信息的保护。

示例说明

下面是两个示例说明:

  1. 将应用程序的配置文件中的数据库链接字符串进行加密处理。

```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");
```

此示例通过对应用程序配置文件中的每个数据库链接字符串进行加密,保护敏感信息,防止恶意程序窃取。

  1. 在程序中使用解密后的链接字符串进行数据库连接。

```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技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#各类集合汇总

    C# 各类集合汇总 在 C# 中有许多不同种类的集合,每种都有其特点和用途,下面对常用的一些集合进行简单的介绍和示例演示。 List List 是一种动态数组,可以根据需要调整大小。它可以用于存储任何类型的对象,尽管在大多数情况下它用于存储对象的列表。 下面是一个例子,展示如何在 List 中添加和访问元素: List<string> fruit…

    C# 2023年5月15日
    00
  • C#时间格式化(Datetime)用法详解

    C#时间格式化(Datetime)用法详解 在C#编程中,时间格式化是一个非常重要的应用,不同的时间格式化操作可以让我们更好的理解和处理时间数据。这篇文章将会详细介绍C#时间格式化的用法和示例。 1. 时间格式化基础 C#通过DateTime类型来表示日期时间。DateTime类型属性包含日期和时间,还有一些特定的格式,下面是一些常用的时间格式化操作: 格式…

    C# 2023年6月1日
    00
  • c#判断操作系统位数的示例分享

    感谢您对c#判断操作系统位数的感兴趣,下面是一个详细的攻略: 1. 背景知识 在编写程序时,我们需要知道操作系统的位数以确定程序的编译选项。64位操作系统的效率和安全性高于32位操作系统,因此我们需要通过代码来判断操作系统是32位还是64位。 2. 简单方法 使用Environment.Is64BitOperatingSystem方法可以判断操作系统是否为6…

    C# 2023年6月3日
    00
  • ASP.NET中Label控件用法详解

    下面是关于“ASP.NET中Label控件用法详解”的详细攻略。 什么是Label控件 Label控件是 ASP.NET中常用的一种控件,用来显示纯文本信息或者富文本信息,可以用来在Web应用中显示静态文本内容,如标题、说明等。 Label控件的用法详解 1. 创建Label控件 Label控件可以通过在ASPX文件中直接使用HTML标记来创建,也可以在后端…

    C# 2023年6月3日
    00
  • 详解Java 加密解密和数字签名问题

    详解Java 加密解密和数字签名问题 介绍 在现在这个信息化的时代,数据的安全性被赋予越来越高的重要性。在这种情况下,加密、解密和数字签名成为了非常重要的技术手段。本文将详细介绍Java中加密、解密和数字签名的基本知识和常用的实现方式。 加密和解密 加密是指将明文转换成密文的过程,解密则是将密文转换成明文的过程。在Java中,常用的加密算法有对称加密算法和非…

    C# 2023年6月7日
    00
  • C#如何更改Word的语言设置

    我来为你详细讲解如何使用C#更改Word的语言设置。 1. Word语言设置的基本知识 在开始使用C#编程更改Word的语言设置之前,我们需要先了解一些基本概念和知识。 Word语言设置分为三个部分:界面语言、编辑语言和默认语言。 界面语言:指Word的菜单、工具栏、对话框等界面显示的语言。 编辑语言:指Word用于检查拼写和语法的语言。 默认语言:指Wor…

    C# 2023年6月1日
    00
  • .NET中的IO操作之文件流用法分析

    当涉及到文件或者文件夹的操作时,我们就要使用文件流。文件流是.NET框架中常用的IO流之一,用于在程序与文件之间传输数据。在本文中,我将详细介绍文件流的使用方法,并提供两个示例。 文件流的基本使用方法 文件流的基本使用步骤如下: 打开或创建文件流 通过读取或写入方法读取或写入数据 关闭文件流 示例代码: using System.IO; // 打开或创建文件…

    C# 2023年5月31日
    00
  • C#使用IHttpModule接口修改http输出的方法

    这里介绍一下如何使用IHttpModule接口来修改HTTP输出。 什么是 IHttpModule IHttpModule 是一个定义在 System.Web 命名空间下的接口,通过实现它,我们可以在 ASP.NET 应用程序处理请求和发送响应时注入一些自己的操作。具体来说,IHttpModule 接口中提供了两个方法: Init:在应用程序域中初始化模块时…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部