各種加密算法C#

加密:    
static String Encrypt(String pwd) {    
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();//des進行加密    
PasswordDeriveBytes db = new PasswordDeriveBytes(pwd, null);//產生key    
byte[] key = db.GetBytes(8);    
MemoryStream ms = new MemoryStream();//存儲加密後的數據    
CryptoStream cs = new CryptoStream(ms,desc.CreateEncryptor(key, key),CryptoStreamMode.Write);    
byte[] data = Encoding.Unicode.GetBytes(pwd);//取到密碼的字節流    
cs.Write(data, 0, data.Length);//進行加密    
cs.FlushFinalBlock();    
byte[] res = ms.ToArray();//取加密後的數據    
return Encoding.Unicode.GetString(res);//轉換到字符串返回    
}    
解密:    
static String Decrypt(String pwd, String data) {    
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();    
PasswordDeriveBytes db = new PasswordDeriveBytes(pwd, null);//產生key    
byte[] key = db.GetBytes(8);    
MemoryStream ms = new MemoryStream();//存儲解密後的數據    
CryptoStream cs = new CryptoStream(ms,desc.CreateDecryptor(key, key),CryptoStreamMode.Write);    
byte[] databytes = Encoding.Unicode.GetBytes(data);//取到加密後的數據的字節流    
cs.Write(databytes, 0, databytes.Length);//解密數據    
cs.FlushFinalBlock();    
byte[] res = ms.ToArray();    
return Encoding.Unicode.GetString(res);//返回解密後的數據    
}      
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)   
    {   
  
        /**//**//**//// <summary>   
        /// 與ASP兼容的MD5加密算法   
        /// </summary>   
  
        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 };   
        /**//**//**//**//**//**//**//// <summary>   
        /// DES加密字符串   
        /// </summary>   
        /// <param name="encryptString">待加密的字符串</param>   
        /// <param name="encryptKey">加密密鑰,要求爲8位</param>   
        /// <returns>加密成功返回加密後的字符串,失敗返回源串</returns>   
        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;   
            }   
        }   
  
        /**//**//**//**//**//**//**//// <summary>   
        /// DES解密字符串   
        /// </summary>   
        /// <param name="decryptString">待解密的字符串</param>   
        /// <param name="decryptKey">解密密鑰,要求爲8位,和加密密鑰相同</param>   
        /// <returns>解密成功返回解密後的字符串,失敗返源串</returns>   
        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;   
            }   
        }   
  
  
    }   
}  

 

發佈了18 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章