C# 加密解密程序例子

417135717 贡献于2012-08-13

作者 Scorpio  创建于2008-08-17 08:56:00   修改者Scorpio  修改于2008-08-17 08:56:00字数9377

文档摘要:C# 加密解密程序例子
关键词:

1、方法一 (不可逆加密) public string EncryptPassword(string PasswordString,string PasswordFormat )    {    string  encryptPassword = null;    if (PasswordFormat="SHA1"){    encryptPassword=FormsAuthortication.HashPasswordForStoringInConfigFile(PasswordString ,"SHA1");    }    elseif (PasswordFormat="MD5")    { encryptPassword=FormsAuthortication.HashPasswordForStoringInConfigFile(PasswordString ,"MD5");    } return encryptPassword ; }   2、方法二 (可逆加密)       public interface IBindesh {     string encode(string str);     string decode(string str); } public class EncryptionDecryption : IBindesh     {         public string encode(string str)         {             string htext = "";             for ( int i = 0; i < str.Length; i++)             {                 htext = htext + (char) (str[i] + 10 - 1 * 2);             }             return htext;         }         public string decode(string str)         {             string dtext = "";             for ( int i=0; i < str.Length; i++)             {                 dtext = dtext + (char) (str[i] - 10 + 1*2);             }             return dtext;         }   3、方法三 (可逆加密)                   const string KEY_64 = "VavicApp";//注意了,是8个字符,64位         const string IV_64 = "VavicApp"; public string Encode(string data)         {             byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);             byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);             DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();             int i = cryptoProvider.KeySize;             MemoryStream ms = new MemoryStream();             CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);             StreamWriter sw = new StreamWriter(cst);             sw.Write(data);             sw.Flush();             cst.FlushFinalBlock();             sw.Flush();             return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);         }         public string Decode(string data)         {             byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);             byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);             byte[] byEnc;             try             {                 byEnc = Convert.FromBase64String(data);             }             catch             {                 return null;             }             DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();             MemoryStream ms = new MemoryStream(byEnc);             CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);             StreamReader sr = new StreamReader(cst);             return sr.ReadToEnd();         }   4、MD5不可逆加密     (32位加密) public string GetMD5(string s, string _input_charset)     {         /**//**//**////         /// 与ASP兼容的MD5加密算法         ///         MD5 md5 = new MD5CryptoServiceProvider();         byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));         StringBuilder sb = new StringBuilder(32);         for (int i = 0; i < t.Length; i++)         {             sb.Append(t[i].ToString("x").PadLeft(2, '0'));         }         return sb.ToString();     }    (16位加密)   public static string GetMd5Str(string ConvertString)     {         MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();         string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);         t2 = t2.Replace("-", "");         return t2;     }    5、加解文本文件       //加密文件     private static void EncryptData(String inName, String outName, byte[] desKey, byte[] desIV)     {         //Create the file streams to handle the input and output files.         FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);         FileStream fout = new FileStream(outName, 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(desKey, desIV), 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();     }     //解密文件     private static void DecryptData(String inName, String outName, byte[] desKey, byte[] desIV)     {         //Create the file streams to handle the input and output files.         FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);         FileStream fout = new FileStream(outName, 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(desKey, desIV), 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();     }   6、 using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.IO; namespace Component {     public class Security     {         public Security()         {                 }         //默认密钥向量         private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };         /**//**//**//**//**//**//**////         /// DES加密字符串         ///         /// 待加密的字符串         /// 加密密钥,要求为8位         /// 加密成功返回加密后的字符串,失败返回源串         public static string EncryptDES(string encryptString, string encryptKey)         {             try             {                 byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));                 byte[] rgbIV = Keys;                 byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);                 DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();                 MemoryStream mStream = new MemoryStream();                 CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);                 cStream.Write(inputByteArray, 0, inputByteArray.Length);                 cStream.FlushFinalBlock();                 return Convert.ToBase64String(mStream.ToArray());             }             catch             {                 return encryptString;             }         }         /**//**//**//**//**//**//**////         /// DES解密字符串         ///         /// 待解密的字符串         /// 解密密钥,要求为8位,和加密密钥相同         /// 解密成功返回解密后的字符串,失败返源串         public static string DecryptDES(string decryptString, string decryptKey)         {             try             {                 byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);                 byte[] rgbIV = Keys;                 byte[] inputByteArray = Convert.FromBase64String(decryptString);                 DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();                 MemoryStream mStream = new MemoryStream();                 CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);                 cStream.Write(inputByteArray, 0, inputByteArray.Length);                 cStream.FlushFinalBlock();                 return Encoding.UTF8.GetString(mStream.ToArray());             }             catch             {                 return decryptString;             }         }     } }           C#一个加密解密的方法 using System; public interface IBindesh {     string encode(string str);     string decode(string str); } namespace EncryptionDecryption {     ///     /// 加密解密     ///     public class EncryptionDecryption : IBindesh     {         public string encode(string str)         {             string htext = "";             for ( int i = 0; i < str.Length; i++)             {                 htext = htext + (char) (str[i] + 10 - 1 * 2);             }             return htext;         }         public string decode(string str)         {             string dtext = "";             for ( int i=0; i < str.Length; i++)             {                 dtext = dtext + (char) (str[i] - 10 + 1*2);             }             return dtext;         }     }     public class test     {         public static void aa()         {             EncryptionDecryption inter = new EncryptionDecryption();             Console.WriteLine(((IBindesh)inter).encode("aa"));             System.Console.ReadLine();         }     } } /*************************字符串加密算法***********************/ public string EncryptString(string str)   {    char[] Base64Code=new char[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','+','/','='};    byte empty=(byte)0;    System.Collections.ArrayList byteMessage=new  System.Collections.ArrayList(System.Text.Encoding.Default.GetBytes(str));    System.Text.StringBuilder outmessage;    int messageLen=byteMessage.Count;    int page=messageLen/3;    int use=0;    if((use=messageLen%3)>0)    {     for(int i=0;i<3-use;i++)      byteMessage.Add(empty);     page++;    }    outmessage=new System.Text.StringBuilder(page*4);    for(int i=0;i>2;       outstr[1]=((instr[0]&0x03)<<4)^(instr[1]>>4);     if(!instr[1].Equals(empty))      outstr[2]=((instr[1]&0x0f)<<2)^(instr[2]>>6);     else      outstr[2]=64;     if(!instr[2].Equals(empty))      outstr[3]=(instr[2]&0x3f);     else      outstr[3]=64;     outmessage.Append(Base64Code[outstr[0]]);     outmessage.Append(Base64Code[outstr[1]]);     outmessage.Append(Base64Code[outstr[2]]);     outmessage.Append(Base64Code[outstr[3]]);    }    return outmessage.ToString();   } /**************************************************字符串解密算法**************************************************/ public string DecryptString(string str)               {    if((str.Length%4)!=0)    {     throw new ArgumentException("不是正确的BASE64编码,请检查。","str");    }    if(!System.Text.RegularExpressions.Regex.IsMatch(str,"^[A-Z0-9/+=]*$",System.Text.RegularExpressions.RegexOptions.IgnoreCase))    {     throw new ArgumentException("包含不正确的BASE64编码,请检查。","str");    }    string Base64Code="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=";    int page=str.Length/4;    System.Collections.ArrayList outMessage=new System.Collections.ArrayList(page*3);    char[] message=str.ToCharArray();    for(int i=0;i>4));     if(instr[2]!=64)     {      outstr[1]=(byte)((instr[1]<<4)^((instr[2]&0x3c)>>2));     }     else     {      outstr[2]=0;     }     if(instr[3]!=64)     {      outstr[2]=(byte)((instr[2]<<6)^instr[3]);     }     else     {      outstr[2]=0;     }     outMessage.Add(outstr[0]);     if(outstr[1]!=0)      outMessage.Add(outstr[1]);     if(outstr[2]!=0)      outMessage.Add(outstr[2]);    }    byte[] outbyte=(byte[])outMessage.ToArray(Type.GetType("System.Byte"));    return System.Text.Encoding.Default.Get String(outbyte);      } 文件的加密解密说明:        在对文件进行加密解密时,先将文件的内容读取到一个字符串变量中,然后对字符串加密,最后再把加密后的字符串写入到文件中。详见: 文件操作.txt。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档