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

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();

输出结果:
个人订阅号:

猜你喜欢

转载自blog.csdn.net/a519736285/article/details/80685147