DES加密解密和MD5加密验证(C#)

本文介绍了如何在C#中使用DES进行加密解密,强调密钥和向量长度须为8位,同时讲解了MD5加密的特点,即无法解密,只能通过比较加密后的字符串来验证一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DES加密解密:

1.添加using System.Security.Cryptography;和using System.IO;


2.密钥和向量长度必须为8,DES加密以后可以根据密钥和向量进行解密恢复原来的字符串

代码如下:

//密钥和向量字符串长度必须为8
public static class Des
{
	private static string key = "12345678";
	private static string iv = "87654321";
	/// <param name="encryptedValue">待解密的字符串</param>  
	/// <param name="key">密钥</param>  
	/// <param name="iv">向量</param>  
	/// <returns>解密后的字符串</returns>  
	public static string DESDecrypt(string encryptedValue)
	{
		using (DESCryptoServiceProvider sa = new DESCryptoServiceProvider { Key = Encoding.UTF8.GetBytes(key), IV = Encoding.UTF8.GetBytes(iv) })
		{
			using (ICryptoTransform ct = sa.CreateDecryptor())
			{
				byte[] byt = Convert.FromBase64String(encryptedValue);
				using (var ms = new MemoryStream())
				{
					using (var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write))
					{
						cs.Write(byt, 0, byt.Length);
						cs.FlushFinalBlock();
					}
					return Encoding.UTF8.GetString(ms.ToArray());
				}
			}
		}
	}

	/// <param name="encryptedValue">要加密的字符串</param>  
	/// <param name="key">密钥</param>  
	/// <param name="iv">向量</param>  
	/// <returns>加密后的字符串</returns>  
	public static string DESEncrypt(string originalValue)
	{
		using (DESCryptoServiceProvider sa = new DESCryptoServiceProvider { Key = Encoding.UTF8.GetBytes(key), IV = Encoding.UTF8.GetBytes(iv) })
		{
			using (ICryptoTransform ct = sa.CreateEncryptor())
			{
				byte[] by = Encoding.UTF8.GetBytes(originalValue);
				using (var ms = new MemoryStream())
				{
					using (var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write))
					{
						cs.Write(by, 0, by.Length);
						cs.FlushFinalBlock();
					}
					return Convert.ToBase64String(ms.ToArray());
				}
			}
		}
	}
}

MD5加密验证:

1:添加using System.Security.Cryptography;


2.MD5加密以后没法解密,只能通过把字符串加密比较是否一致来判断验证是否通过


代码如下:

public static class Md5
{
	public static string GetMd5Hash(string input)
	{
		MD5 md5Hash = MD5.Create();
		byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
		StringBuilder sBuilder = new StringBuilder();
		for (int i = 0; i < data.Length; i++)
		{
			sBuilder.Append(data[i].ToString("x2"));
		}
		return sBuilder.ToString();
	}

	// Verify a hash against a string.
	public static bool VerifyMd5Hash(string input, string hash)
	{
		string hashOfInput = GetMd5Hash(input);
		StringComparer comparer = StringComparer.OrdinalIgnoreCase;
		if (0 == comparer.Compare(hashOfInput, hash))
			return true;
		else
			return false;
	}
}
在main函数中添加对两种加密方式的测试,代码如下:
Console.WriteLine("DES加密解密");
String des = Des.DESEncrypt("Hello World!!!");
Console.WriteLine("加密后:{0}", des);
Console.WriteLine("解密后:{0}", Des.DESDecrypt(des));

Console.WriteLine("MD5加密验证");
string md5 = Md5.GetMd5Hash("Hello World!!!");
Console.WriteLine("加密后:{0}", md5);
Boolean flag = Md5.VerifyMd5Hash("hello world!!!", md5);
Console.WriteLine("加密字符串与hello world!!!比较:{0}", flag);
flag = Md5.VerifyMd5Hash("Hello World!!!", md5);
Console.WriteLine("加密字符串与Hello World!!!比较:{0}", flag);
Console.ReadLine();

输出结果:
个人订阅号:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值