//名称空间 using System; using System.Security.Cryptography; using System.IO; using System.Text; //方法 //加密方法 publicstring Encrypt(string pToEncrypt, string sKey) { DESCryptoServiceProvider des =new DESCryptoServiceProvider(); //把字符串放到byte数组中 //原来使用的UTF8编码,我改成Unicode编码了,不行 byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt); //建立加密对象的密钥和偏移量 //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 //使得输入密码必须输入英文文本 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms =new MemoryStream(); CryptoStream cs =new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write); //Write the byte array into the crypto stream //(It will end up in the memory stream) cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); //Get the data back from the memory stream, and into a string StringBuilder ret =new StringBuilder(); foreach(byte b in ms.ToArray()) { //Format as hex ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } //解密方法 publicstring Decrypt(string pToDecrypt, string sKey) { DESCryptoServiceProvider des =new DESCryptoServiceProvider(); //Put the input string into the byte array byte[] inputByteArray =newbyte[pToDecrypt.Length /2]; for(int x =0; x < pToDecrypt.Length /2; x++) { int i = (Convert.ToInt32(pToDecrypt.Substring(x *2, 2), 16)); inputByteArray[x] = (byte)i; } //建立加密对象的密钥和偏移量,此值重要,不能修改 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms =new MemoryStream(); CryptoStream cs =new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write); //Flush the data through the crypto stream into the memory stream cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); //Get the decrypted data back from the memory stream //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 StringBuilder ret =new StringBuilder(); return System.Text.Encoding.Default.GetString(ms.ToArray()); }
来源:http://blog.youkuaiyun.com/keyu23/archive/2005/09/27/490577.aspx
using System; using System.IO; using System.Text; using System.Security.Cryptography; using System.Web; namespace Test.Com { /**////<summary> /// DESEncryptor 的摘要说明。 ///</summary> publicclass DESEncryptor { 私有成员#region 私有成员 /**////<summary> /// 输入字符串 ///</summary> privatestring inputString=null; /**////<summary> /// 输出字符串 ///</summary> privatestring outString=null; /**////<summary> /// 输入文件路径 ///</summary> privatestring inputFilePath=null; /**////<summary> /// 输出文件路径 ///</summary> 中国3S吧 3s8.cn privatestring outFilePath=null; /**////<summary> /// 加密密钥 ///</summary> privatestring encryptKey=null; /**////<summary> /// 解密密钥 ///</summary> privatestring decryptKey=null; /**////<summary> /// 提示信息 ///</summary> privatestring noteMessage=null; #endregion 公共属性#region 公共属性 /**////<summary> /// 输入字符串 ///</summary> publicstring InputString { get{return inputString;} set{inputString=value;} } /**////<summary> /// 输出字符串 ///</summary> publicstring OutString { get{return outString;} set{outString=value;} } /**////<summary> /// 输入文件路径 ///</summary> publicstring InputFilePath { get{return inputFilePath;} set{inputFilePath=value;} } /**////<summary> /// 输出文件路径 ///</summary> 中国3S吧 3s8.cn publicstring OutFilePath { get{return outFilePath;} set{outFilePath=value;} } /**////<summary> /// 加密密钥 ///</summary> publicstring EncryptKey { get{return encryptKey;} set{encryptKey=value;} } /**////<summary> /// 解密密钥 ///</summary> publicstring DecryptKey { get{return decryptKey;} set{decryptKey=value;} } /**////<summary> /// 错误信息 ///</summary> publicstring NoteMessage { get{return noteMessage;} set{noteMessage=value;} } #endregion 构造函数#region 构造函数 public DESEncryptor() { // // TODO: 在此处添加构造函数逻辑 // } #endregion DES加密字符串#region DES加密字符串 /**////<summary> /// 加密字符串 /// 注意:密钥必须为8位 ///</summary> ///<param name="strText">字符串</param> ///<param name="encryptKey">密钥</param> 中国3S吧 3s8.cn publicvoid DesEncrypt() { 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)); DESCryptoServiceProvider des =new DESCryptoServiceProvider(); 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.ToBase64String(ms.ToArray()); } catch(System.Exception error) { this.noteMessage=error.Message; } } #endregion DES解密字符串#region DES解密字符串 /**////<summary> /// 解密字符串 ///</summary> ///<param name="this.inputString">加了密的字符串</param> ///<param name="decryptKey">密钥</param> publicvoid 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(); inputByteArray = Convert.FromBase64String(this.inputString); 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 DES加密文件#region DES加密文件 /**////<summary> /// DES加密文件 ///</summary> ///<param name="this.inputFilePath">源文件路径</param> ///<param name="this.outFilePath">输出文件路径</param> ///<param name="encryptKey">密钥</param> publicvoid 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 =newbyte[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; } 中国3S吧 3s8.cn encStream.Close(); fout.Close(); fin.Close(); 中国3S吧 3s8.cn } catch(System.Exception error) { this.noteMessage=error.Message.ToString(); } } #endregion DES解密文件#region DES解密文件 /**////<summary> /// 解密文件 ///</summary> ///<param name="this.inputFilePath">加密了的文件路径</param> ///<param name="this.outFilePath">输出文件路径</param> ///<param name="decryptKey">密钥</param> publicvoid 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 =newbyte[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; } 中国3S吧 3s8.cn encStream.Close(); fout.Close(); fin.Close(); } catch(System.Exception error) { this.noteMessage=error.Message.ToString(); } } #endregion MD5#region MD5 /**////<summary> /// MD5 Encrypt ///</summary> ///<param name="strText">text</param> ///<returns>md5 Encrypt string</returns> publicvoid 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 } }