### MD5加密算法 #### 一、概述 MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,可以产生一个128位(16字节)的散列值,通常用来确保数据的完整性和一致性。MD5算法在.NET框架结合SQL Server的应用场景中,主要用于用户密码的加密存储,从而提高系统的安全性。 #### 二、MD5算法特点 1. **不可逆性**:给定一个散列值,几乎不可能反推出原始输入。 2. **固定长度输出**:不论输入数据的大小如何,MD5算法产生的散列值都是固定长度的128位。 3. **雪崩效应**:即使输入数据只有微小的变化,产生的散列值也会有显著的不同。 4. **唯一性**:理论上,不同的输入数据几乎不会产生相同的散列值。 #### 三、.NET中实现MD5加密 .NET框架提供了丰富的类库支持,包括对MD5等加密算法的支持。下面将详细介绍如何在.NET中实现MD5加密,并与SQL Server数据库结合使用。 ##### 1. 导入必要的命名空间 ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; ``` ##### 2. 实现MD5加密方法 ```csharp /// <summary> /// MD5加密方法 /// </summary> public static string GetMD5String(string str) { // 创建MD5实例 MD5 md5 = new MD5CryptoServiceProvider(); // 将字符串转换为字节数组 byte[] data = System.Text.Encoding.Default.GetBytes(str); // 计算散列值 byte[] md5data = md5.ComputeHash(data); // 清理资源 md5.Clear(); // 构建十六进制字符串 StringBuilder builder = new StringBuilder(); for (int i = 0; i < md5data.Length; i++) { builder.Append(md5data[i].ToString("X2")); // X2表示十六进制格式,填充零 } return builder.ToString(); } ``` #### 四、MD5加密示例代码 在实际应用中,我们可以通过以下方式调用`GetMD5String`方法来加密用户输入的密码: ```csharp // 假设从表单获取用户名和密码 string name = txtMName.Text; string pwd = txtMPwd.Text; // 调用MD5加密方法 string encryptedPwd = GetMD5String(pwd); // 输出或保存加密后的密码 Console.WriteLine("Encrypted Password: " + encryptedPwd); ``` #### 五、结合SQL Server存储加密后的密码 1. **创建数据库表**:首先需要在SQL Server中创建一个包含用户名和密码的表,如`Users`表。 ```sql CREATE TABLE Users ( UserID INT PRIMARY KEY IDENTITY(1,1), UserName NVARCHAR(50) NOT NULL, UserPassword NVARCHAR(32) NOT NULL -- 存储MD5散列值 ); ``` 2. **插入加密后的密码**:通过SQL语句或ADO.NET插入加密后的密码到数据库。 ```csharp using (SqlConnection connection = new SqlConnection("Data Source=yourServer;Initial Catalog=yourDatabase;Integrated Security=True")) { string insertQuery = "INSERT INTO Users (UserName, UserPassword) VALUES (@UserName, @UserPassword)"; using (SqlCommand command = new SqlCommand(insertQuery, connection)) { command.Parameters.AddWithValue("@UserName", name); command.Parameters.AddWithValue("@UserPassword", encryptedPwd); connection.Open(); int rowsAffected = command.ExecuteNonQuery(); Console.WriteLine("Rows Affected: " + rowsAffected); } } ``` 3. **查询并验证密码**:当用户登录时,从数据库读取密码散列值并与用户输入的密码进行比较。 #### 六、总结 通过上述步骤,我们可以有效地使用MD5算法结合.NET和SQL Server来实现用户密码的安全存储和验证。需要注意的是,虽然MD5在许多情况下足够安全,但在高度敏感的应用中,推荐使用更安全的散列算法,如SHA-256,或者采用更复杂的密码存储机制,比如加盐散列(salted hash)。 在开发涉及用户认证的应用程序时,正确地使用密码散列算法是至关重要的。


















using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
/// <summary>
/// MD5加密算法
/// </summary>
public static string GetMD5String(string str)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] data = System.Text.Encoding.Default.GetBytes(str);
byte[] md5data = md5.ComputeHash(data);
md5.Clear();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < md5data.Length - 1; i++)
{
Console.WriteLine(md5data[i].ToString());
builder.Append(md5data[i].ToString("X2"));
}
return builder.ToString();
}