⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cryptography.cs

📁 C#实现DES加密解密,AES加密解密.一个基本类
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;

using System.Security.Cryptography;
using System.IO;

namespace Cryptography
{
	public class Cryptography
	{
		#region DES加密解密
		/// <summary>
		/// DES加密
		/// </summary>
		/// <param name="Data">被加密的明文</param>
		/// <param name="Key">密钥</param>
		/// <param name="Vector">向量</param>
		/// <returns>密文</returns>
		public static Byte[] DESEncrypt(Byte[] Data, String Key, String Vector)
		{
			Byte[] bKey = new Byte[8];
			Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
			Byte[] bVector = new Byte[8];
			Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

			Byte[] Cryptograph = null; // 加密后的密文

			DESCryptoServiceProvider EncryptProvider = new DESCryptoServiceProvider();
			EncryptProvider.Mode = CipherMode.CBC;
			EncryptProvider.Padding = PaddingMode.Zeros;

			try
			{
				// 开辟一块内存流
				using (MemoryStream Memory = new MemoryStream())
				{
					// 把内存流对象包装成加密流对象
					using (CryptoStream Encryptor = new CryptoStream(Memory,
					EncryptProvider.CreateEncryptor(bKey, bVector),
					CryptoStreamMode.Write))
					{
						// 明文数据写入加密流
						Encryptor.Write(Data, 0, Data.Length);
						Encryptor.FlushFinalBlock();

						Cryptograph = Memory.ToArray();
					}
				}
			}
			catch
			{
				Cryptograph = null;
			}

			return Cryptograph;
		}

		/// <summary>
		/// DES解密
		/// </summary>
		/// <param name="Data">被解密的密文</param>
		/// <param name="Key">密钥</param>
		/// <param name="Vector">向量</param>
		/// <returns>明文</returns>
		public static Byte[] DESDecrypt(Byte[] Data, String Key, String Vector)
		{
			Byte[] bKey = new Byte[8];
			Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
			Byte[] bVector = new Byte[8];
			Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

			Byte[] Original = null;

			DESCryptoServiceProvider CryptoProvider = new DESCryptoServiceProvider();
			CryptoProvider.Mode = CipherMode.CBC;
			CryptoProvider.Padding = PaddingMode.Zeros;

			try
			{
				// 开辟一块内存流,存储密文
				using (MemoryStream Memory = new MemoryStream(Data))
				{
					// 把内存流对象包装成加密流对象
					using (CryptoStream Decryptor = new CryptoStream(Memory,
					CryptoProvider.CreateDecryptor(bKey, bVector),
					CryptoStreamMode.Read))
					{
						// 明文存储区
						using (MemoryStream OriginalMemory = new MemoryStream())
						{
							Byte[] Buffer = new Byte[1024];
							Int32 readBytes = 0;
							while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
							{
								OriginalMemory.Write(Buffer, 0, readBytes);
							}

							Original = OriginalMemory.ToArray();
						}
					}
				}
			}
			catch
			{
				Original = null;
			}

			return Original;
		}
		#endregion

		#region AES加密解密
		/// <summary>
		/// AES加密
		/// </summary>
		/// <param name="Data">被加密的明文</param>
		/// <param name="Key">密钥</param>
		/// <param name="Vector">向量</param>
		/// <returns>密文</returns>
		public static Byte[] AESEncrypt(Byte[] Data, String Key, String Vector)
		{
			Byte[] bKey = new Byte[32];
			Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
			Byte[] bVector = new Byte[16];
			Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

			Byte[] Cryptograph = null;	// 加密后的密文

			Rijndael Aes = Rijndael.Create();
			try
			{
				// 开辟一块内存流
				using (MemoryStream Memory = new MemoryStream())
				{
					// 把内存流对象包装成加密流对象
					using (CryptoStream Encryptor = new CryptoStream(Memory,
						Aes.CreateEncryptor(bKey, bVector),
						CryptoStreamMode.Write))
					{
						// 明文数据写入加密流
						Encryptor.Write(Data, 0, Data.Length);
						Encryptor.FlushFinalBlock();

						Cryptograph = Memory.ToArray();
					}
				}
			}
			catch
			{
				Cryptograph = null;
			}

			return Cryptograph;
		}

		/// <summary>
		/// AES解密
		/// </summary>
		/// <param name="Data">被解密的密文</param>
		/// <param name="Key">密钥</param>
		/// <param name="Vector">向量</param>
		/// <returns>明文</returns>
		public static Byte[] AESDecrypt(Byte[] Data, String Key, String Vector)
		{
			Byte[] bKey = new Byte[32];
			Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
			Byte[] bVector = new Byte[16];
			Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);

			Byte[] Original = null;	// 解密后的明文

			Rijndael Aes = Rijndael.Create();
			try
			{
				// 开辟一块内存流,存储密文
				using (MemoryStream Memory = new MemoryStream(Data))
				{
					// 把内存流对象包装成加密流对象
					using (CryptoStream Decryptor = new CryptoStream(Memory,
					Aes.CreateDecryptor(bKey, bVector),
					CryptoStreamMode.Read))
					{
						// 明文存储区
						using (MemoryStream OriginalMemory = new MemoryStream())
						{
							Byte[] Buffer = new Byte[1024];
							Int32 readBytes = 0;
							while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
							{
								OriginalMemory.Write(Buffer, 0, readBytes);
							}

							Original = OriginalMemory.ToArray();
						}
					}
				}
			}
			catch
			{
				Original = null;
			}

			return Original;
		}
		#endregion
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -