des.cs

来自「本源代码的功能是:提供3DES的加密方法与解密方法」· CS 代码 · 共 401 行

CS
401
字号
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Web;

namespace Test.Com
{
	/// <summary>
	/// DESEncryptor 的摘要说明。
	/// </summary>
	public class DESEncryptor
	{
		#region 私有成员
		/// <summary>
		/// 输入字符串
		/// </summary>
		private string inputString=null;
		/// <summary>
		/// 输出字符串
		/// </summary>
		private string outString=null;
		/// <summary>
		/// 输入文件路径
		/// </summary>
		private string inputFilePath=null;
		/// <summary>
		/// 输出文件路径
		/// </summary>
		private string outFilePath=null;
		/// <summary>
		/// 加密密钥
		/// </summary>
		private string encryptKey=null;
		/// <summary>
		/// 解密密钥
		/// </summary>
		private string decryptKey=null;
		/// <summary>
		/// 提示信息
		/// </summary>
		private string noteMessage=null;
		#endregion
		#region 公共属性
		/// <summary>
		/// 输入字符串
		/// </summary>
		public string InputString
		{
			get{return inputString;}
			set{inputString=value;}
		}
		/// <summary>
		/// 输出字符串
		/// </summary>
		public string OutString
		{
			get{return outString;}
			set{outString=value;}
		}
		/// <summary>
		/// 输入文件路径
		/// </summary>
		public string InputFilePath
		{
			get{return inputFilePath;}
			set{inputFilePath=value;}
		}
		/// <summary>
		/// 输出文件路径
		/// </summary>
		public string OutFilePath
		{
			get{return outFilePath;}
			set{outFilePath=value;}
		}
		/// <summary>
		/// 加密密钥
		/// </summary>
		public string EncryptKey
		{
			get{return encryptKey;}
			set{encryptKey=value;}
		}
		/// <summary>
		/// 解密密钥
		/// </summary>
		public string DecryptKey
		{
			get{return decryptKey;}
			set{decryptKey=value;}
		}
		/// <summary>
		/// 错误信息
		/// </summary>
		public string NoteMessage
		{
			get{return noteMessage;}
			set{noteMessage=value;}
		}
		#endregion
		#region 构造函数
		public DESEncryptor()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
		}
		#endregion

		#region DES加密字符串
		/// <summary>
		/// 加密字符串
		/// 注意:密钥必须为8位
		/// </summary>
		/// <param name="strText">字符串</param>
		/// <param name="encryptKey">密钥</param>
		public  byte[]  DesEncrypt()
		{
			byte[] r_byt={};
			byte[] byKey=null;   
			byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF}; 
			try
			{
				
				//byKey = System.Text.Encoding.UTF8.GetBytes(this.EncryptKey);
				byKey = new Byte[8];
				byKey[0] =Convert.ToByte(encryptKey.Substring(0,2),16);
				byKey[1] =Convert.ToByte(encryptKey.Substring(2,2),16);
				byKey[2] =Convert.ToByte(encryptKey.Substring(4,2),16);
				byKey[3] =Convert.ToByte(encryptKey.Substring(6,2),16);
				byKey[4] =Convert.ToByte(encryptKey.Substring(8,2),16);
				byKey[5] =Convert.ToByte(encryptKey.Substring(10,2),16);
				byKey[6] =Convert.ToByte(encryptKey.Substring(12,2),16);
				byKey[7] =Convert.ToByte(encryptKey.Substring(14,2),16);
				DESCryptoServiceProvider des = new DESCryptoServiceProvider();
				des.Mode =  System.Security.Cryptography.CipherMode.ECB;
				des.Padding = System.Security.Cryptography.PaddingMode.None;
				byte[] inputByteArray = Encoding.UTF8.GetBytes(this.inputString);
				MemoryStream ms = new  MemoryStream();
				CryptoStream cs = new  CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write) ;
				cs.Write(inputByteArray, 0, inputByteArray.Length);
				cs.FlushFinalBlock();

				//this.outString=Convert.ToString(ms.ToArray());
				byte[] aaa=ms.ToArray();
				string strss = Encoding.UTF8.GetString(ms.ToArray());
				r_byt=aaa;
				//this.outString=Convert.ToString(aaa[0]) +Convert.ToString(aaa[1])+Convert.ToString(aaa[2])+Convert.ToString(aaa[3])+Convert.ToString(aaa[4])+Convert.ToString(aaa[5])+Convert.ToString(aaa[6])+Convert.ToString(aaa[7]);
			}
			catch(System.Exception error)
			{
				this.noteMessage=error.Message;
			}
			return r_byt;
		}

		public  byte[]  DesEncrypt2(byte[] bbb)
		{
			byte[] r_byt={};
			byte[] byKey=null;   
			byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF}; 
			try
			{
				
				//byKey = System.Text.Encoding.UTF8.GetBytes(this.EncryptKey);
				byKey = new Byte[8];
				byKey[0] =Convert.ToByte(encryptKey.Substring(0,2),16);
				byKey[1] =Convert.ToByte(encryptKey.Substring(2,2),16);
				byKey[2] =Convert.ToByte(encryptKey.Substring(4,2),16);
				byKey[3] =Convert.ToByte(encryptKey.Substring(6,2),16);
				byKey[4] =Convert.ToByte(encryptKey.Substring(8,2),16);
				byKey[5] =Convert.ToByte(encryptKey.Substring(10,2),16);
				byKey[6] =Convert.ToByte(encryptKey.Substring(12,2),16);
				byKey[7] =Convert.ToByte(encryptKey.Substring(14,2),16);
				DESCryptoServiceProvider des = new DESCryptoServiceProvider();
				des.Mode =  System.Security.Cryptography.CipherMode.ECB;
				des.Padding = System.Security.Cryptography.PaddingMode.None;
				byte[] inputByteArray = bbb;
				MemoryStream ms = new  MemoryStream();
				CryptoStream cs = new  CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write) ;
				cs.Write(inputByteArray, 0, inputByteArray.Length);
				cs.FlushFinalBlock();

				//this.outString=Convert.ToString(ms.ToArray());
				byte[] aaa=ms.ToArray();
				r_byt = aaa;
				//this.outString=Convert.ToString(aaa[0]) +Convert.ToString(aaa[1])+Convert.ToString(aaa[2])+Convert.ToString(aaa[3])+Convert.ToString(aaa[4])+Convert.ToString(aaa[5])+Convert.ToString(aaa[6])+Convert.ToString(aaa[7]);
			}
			catch(System.Exception error)
			{
				this.noteMessage=error.Message;
			}
			return r_byt;
		}

		public  void  DesEncrypt3(byte[] bbb)
		{
			byte[] byKey=null;   
			byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF}; 
			try
			{
				
				//byKey = System.Text.Encoding.UTF8.GetBytes(this.EncryptKey);
				byKey = new Byte[8];
				byKey[0] =Convert.ToByte(encryptKey.Substring(0,2),16);
				byKey[1] =Convert.ToByte(encryptKey.Substring(2,2),16);
				byKey[2] =Convert.ToByte(encryptKey.Substring(4,2),16);
				byKey[3] =Convert.ToByte(encryptKey.Substring(6,2),16);
				byKey[4] =Convert.ToByte(encryptKey.Substring(8,2),16);
				byKey[5] =Convert.ToByte(encryptKey.Substring(10,2),16);
				byKey[6] =Convert.ToByte(encryptKey.Substring(12,2),16);
				byKey[7] =Convert.ToByte(encryptKey.Substring(14,2),16);
				DESCryptoServiceProvider des = new DESCryptoServiceProvider();
				des.Mode =  System.Security.Cryptography.CipherMode.ECB;
				des.Padding = System.Security.Cryptography.PaddingMode.None;
				byte[] inputByteArray = bbb;
				MemoryStream ms = new  MemoryStream();
				CryptoStream cs = new  CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write) ;
				cs.Write(inputByteArray, 0, inputByteArray.Length);
				cs.FlushFinalBlock();
				//this.outString=Convert.ToBase64String(ms.ToArray());
				char MyChar = '0';

				byte[] aaa=ms.ToArray();
				this.outString=Convert.ToString(aaa[0],16).PadLeft(2,MyChar) +Convert.ToString(aaa[1],16).PadLeft(2,MyChar)+Convert.ToString(aaa[2],16).PadLeft(2,MyChar)+Convert.ToString(aaa[3],16).PadLeft(2,MyChar)+Convert.ToString(aaa[4],16).PadLeft(2,MyChar)+Convert.ToString(aaa[5],16).PadLeft(2,MyChar)+Convert.ToString(aaa[6],16).PadLeft(2,MyChar)+Convert.ToString(aaa[7],16).PadLeft(2,MyChar);
			}
			catch(System.Exception error)
			{
				this.noteMessage=error.Message;
			}
		}
		#endregion
		
		#region DES解密字符串
		/// <summary>
		/// 解密字符串
		/// </summary>
		/// <param name="this.inputString">加了密的字符串</param>
		/// <param name="decryptKey">密钥</param>
		public void DesDecrypt()
		{
			byte[] byKey = null; 
			byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF}; 
			byte[] inputByteArray = new Byte[this.inputString.Length];
			try
			{
				byKey = System.Text.Encoding.UTF8.GetBytes(decryptKey.Substring(0,8));
				DESCryptoServiceProvider des = new DESCryptoServiceProvider();
				des.Mode =  System.Security.Cryptography.CipherMode.ECB;
				des.Padding = System.Security.Cryptography.PaddingMode.None;
		
				//byte[] aaa=System.Text.Encoding.UTF8.GetBytes(this.inputString);
				//destring=Convert.ToString(aaa[0],8) +Convert.ToString(aaa[1],8)+Convert.ToString(aaa[2],8)+Convert.ToString(aaa[3],8)+Convert.ToString(aaa[4],8)+Convert.ToString(aaa[5],8)+Convert.ToString(aaa[6],8)+Convert.ToString(aaa[7],8);
		
				inputByteArray[0] = Convert.ToByte(this.InputString.Substring(0,2),16);
				//inputByteArray[0] = Convert.ToByte(intValue);

				inputByteArray[1] = Convert.ToByte(this.InputString.Substring(2,2),16);
				//inputByteArray[1]= Convert.ToByte(intValue);

				inputByteArray[2] = Convert.ToByte(this.InputString.Substring(4,2),16);
				//inputByteArray[2]= Convert.ToByte(intValue);

				inputByteArray[3] = Convert.ToByte(this.InputString.Substring(6,2),16);
				//inputByteArray[3]= Convert.ToByte(intValue);

				inputByteArray[4] = Convert.ToByte(this.InputString.Substring(8,2),16);
				//inputByteArray[4]= Convert.ToByte(intValue);

				inputByteArray[5] = Convert.ToByte(this.InputString.Substring(10,2),16);
				//inputByteArray[5]= Convert.ToByte(intValue);

				inputByteArray[6] = Convert.ToByte(this.InputString.Substring(12,2),16);
				//inputByteArray[6]= Convert.ToByte(intValue);

				inputByteArray[7] = Convert.ToByte(this.InputString.Substring(14,2),16);
				//inputByteArray[7]= Convert.ToByte(intValue);



				//inputByteArray = Convert.FromBase64String(destring);
				MemoryStream ms = new MemoryStream();
				CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
				cs.Write(inputByteArray, 0, inputByteArray.Length);
				cs.FlushFinalBlock();
				System.Text.Encoding encoding = new System.Text.UTF8Encoding();
				this.outString=encoding.GetString(ms.ToArray());
			}
			catch(System.Exception error)
			{
				this.noteMessage=error.Message;
			}
		}
		#endregion
		#region DES加密文件
		/// <summary>
		/// DES加密文件
		/// </summary>
		/// <param name="this.inputFilePath">源文件路径</param>
		/// <param name="this.outFilePath">输出文件路径</param>
		/// <param name="encryptKey">密钥</param>
		public void FileDesEncrypt()
		{
			byte[] byKey=null;   
			byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
			try
			{
				byKey = System.Text.Encoding.UTF8.GetBytes(this.encryptKey.Substring(0,8));
				FileStream fin = new FileStream(this.inputFilePath, FileMode.Open, FileAccess.Read);
				FileStream fout = new FileStream(this.outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
				fout.SetLength(0);
				//Create variables to help with read and write.
				byte[] bin  = new byte[100]; //This is intermediate storage for the encryption.
				long rdlen  = 0;              //This is the total number of bytes written.
				long totlen = fin.Length;    //This is the total length of the input file.
				int  len;                     //This is the number of bytes to be written at a time.
				DES des = new DESCryptoServiceProvider();          
				CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
                
 
				//Read from the input file, then encrypt and write to the output file.
				while(rdlen < totlen)
				{
					len = fin.Read(bin, 0, 100);
					encStream.Write(bin, 0, len);
					rdlen = rdlen + len; 
				}
 
				encStream.Close();  
				fout.Close();
				fin.Close();     
    

			}
			catch(System.Exception error)
			{
				this.noteMessage=error.Message.ToString();
    
			}
		}
		#endregion
		#region DES解密文件
		/// <summary>
		/// 解密文件
		/// </summary>
		/// <param name="this.inputFilePath">加密了的文件路径</param>
		/// <param name="this.outFilePath">输出文件路径</param>
		/// <param name="decryptKey">密钥</param>
		public void FileDesDecrypt()
		{
			byte[] byKey = null; 
			byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};    
			try
			{
				byKey = System.Text.Encoding.UTF8.GetBytes(decryptKey.Substring(0,8)); 
				FileStream fin = new FileStream(this.inputFilePath, FileMode.Open, FileAccess.Read);
				FileStream fout = new FileStream(this.outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
				fout.SetLength(0);
				//Create variables to help with read and write.
				byte[] bin  = new byte[100]; //This is intermediate storage for the encryption.
				long rdlen  = 0;              //This is the total number of bytes written.
				long totlen = fin.Length;    //This is the total length of the input file.
				int  len;                     //This is the number of bytes to be written at a time.
				DES des = new DESCryptoServiceProvider();          
				CryptoStream encStream = new CryptoStream(fout, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
                 
 
				//Read from the input file, then encrypt and write to the output file.
				while(rdlen < totlen)
				{
					len = fin.Read(bin, 0, 100);
					encStream.Write(bin, 0, len);
					rdlen = rdlen + len;     
				}
 
				encStream.Close();  
				fout.Close();
				fin.Close();     
			}
			catch(System.Exception error)
			{
				this.noteMessage=error.Message.ToString();
			}
		}
		#endregion
		#region MD5
		/// <summary>
		/// MD5 Encrypt
		/// </summary>
		/// <param name="strText">text</param>
		/// <returns>md5 Encrypt string</returns>
		public void MD5Encrypt()
		{
			MD5 md5 = new MD5CryptoServiceProvider();
			byte[] result = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(this.inputString));   
			this.outString=System.Text.Encoding.Default.GetString(result);
		}
		#endregion
	}
}

⌨️ 快捷键说明

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