zoukankan      html  css  js  c++  java
  • C#的最实用的的字符串加密解密方法大全

    using System;
    using
    System.Data;
    using
    System.Configuration;
    using
    System.Web;
    using
    System.Web.Security;
    using
    System.Web.UI;
    using
    System.Web.UI.WebControls;
    using
    System.Web.UI.WebControls.WebParts;
    using
    System.Web.UI.HtmlControls;
    using
    System.IO;
    using
    System.Security.Cryptography;
    using
    System.Text;

    namespace sql_function
    {

       
    /// <summary>
       
    /// 所有加密方法
       
    /// 定义字符串加密接口 [MD5加密,SHA1加密,字符串加密]    前台只需定这样定义:
       
    /// sql_function.InterFaceStringEncryptionDecryption QueryStringEncodeCodeAndDncodeCode =new sql_function.StringEncryptionDecryption();
       
    /// 说明:其中sql_function代表命名空间名称 InterFaceStringEncryptionDecryption代表接口名称   StringEncryptionDecryption代表类名
       
    /// </summary>
       
    publicinterfaceInterFaceStringEncryptionDecryption
       
    {

           
    #region (1) QueryString加密与解密 开始

           
    /// <summary>
           
    /// QueryString加密
           
    /// </summary>
           
    /// <param name="StringSQL"></param>
           
    /// <returns></returns>

           
    stringQueryStringEncodeCode(stringStringSQL);
           
           
    /// <summary>
           
    /// QueryString解密
           
    /// </summary>
           
    /// <param name="StringSQL"></param>
           
    /// <returns></returns>
           
    stringQueryStringDncodeCode(stringStringSQL);

           
    #endregion


           
    #region (2) Rijndael算法

           
    /// <summary>
           
    /// 加密方法
           
    /// </summary>
           
    /// <param name="Source">待加密的串</param>
           
    /// <returns>经过加密的串</returns>
           
    stringRijndaelEncrypt(stringSource);

           
    /// <summary>
           
    /// 解密方法
           
    /// </summary>
           
    /// <param name="Source">待解密的串</param>
           
    /// <returns>经过解密的串</returns>
           
    stringRijndaelDecrypt(stringSource);

           
    #endregion (2) Rijndael算法


           
    #region ( 3 ) Base64与UTF8混用

           
    /// <summary>
           
    /// 字符串加密
           
    /// </summary>
           
    /// <param name="bb"></param>
           
    /// <returns></returns>
           
    stringBUEncrypt(string bb);

           
    /// <summary>
           
    /// 字符串解密
           
    /// </summary>
           
    /// <param name="aa"></param>
           
    /// <returns></returns>
           
    stringBUDecrypt(string aa);

           
    #endregion

           
    #region ( 4 )固定密钥算法

           
    /// <summary>
           
    /// 字符串加密
           
    /// </summary>
           
    /// <param name="strText"></param>
           
    /// <returns></returns>
           
    stringSKeyEncrypt(string strText);


           
    /// <summary>
           
    /// 字符串解密
           
    /// </summary>
           
    /// <param name="strText"></param>
           
    /// <returns></returns>
           
    stringSKeyDecrypt(string strText);

           
    #endregion


           
    #region ( 5 )DES算法

           
    /// <summary>
           
    /// DES加密
           
    /// </summary>
           
    /// <param name="strSource"></param>
           
    /// <returns></returns>
           
    stringDESEncrypt(string strSource);

           
    /// <summary>
           
    /// DES解密
           
    /// </summary>
           
    /// <param name="strSource"></param>
           
    /// <returns></returns>
           
    stringDESDecrypt(string strSource);


           
    #endregion


           
    #region ( 6 )   加密密码MD5T和SHA1

           
    /// <summary>
           
    /// 加密密码MD5T和SHA1
           
    /// </summary>
           
    /// <param name="strSource">字符串</param>
           
    /// <param name="strFlag">加密类别</param>
           
    /// <param name="substringlen">加密长度</param>
           
    /// <returns></returns>
           
    string encrypting(string strSource,int strFlag,int substringlen);

           
    #endregion
       
    }
       
       
    /// <summary>
       
    /// 定义接口类 加密的类的方法
       
    /// </summary>
       
    publicclassStringEncryptionDecryption:InterFaceStringEncryptionDecryption
       
    {

           
    #region (1) QueryString加密与解密 开始

           
    /// <summary>
           
    /// QueryString加密
           
    /// </summary>
           
    /// <param name="code"></param>
           
    /// <returns></returns>
           
    publicstringQueryStringEncodeCode(string code)
           
    {
               
    string result ="";
               
    if(code ==null|| code =="")
               
    {
                    result
    ="";
               
    }
               
    else
               
    {
                    result
    =Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(""+ code +"")).Replace("+","%2B");

               
    }
               
    return result;
           
    }

           
    /// <summary>
           
    /// QueryString解密
           
    /// </summary>
           
    /// <param name="code"></param>
           
    /// <returns></returns>
           
    publicstringQueryStringDncodeCode(string code)
           
    {
               
    string result ="";

               
    if(code ==null|| code =="")
               
    {
                    result
    ="";
               
    }
               
    else
               
    {
                   
    try
                   
    {
                        result
    =System.Text.Encoding.Default.GetString(Convert.FromBase64String(code.Replace("%2B","+")));
                   
    }
                   
    catch(FormatException ex)///抛出异常 [错误信息“Base-64字符数组的无效长度”]
                   
    {
                        result
    ="0";
                   
    }
               
    }
               
    return result;
           
    }


           
    #endregion (1) QueryString加密与解密 结束


           
    #region ( 2 ) Rijndael算法
           
    privatestaticSymmetricAlgorithm mobjCryptoService =newRijndaelManaged();

           
    privatestaticstringKey="Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";

           
    /// <summary>
           
    /// 获得密钥
           
    /// </summary>
           
    /// <returns>密钥</returns>
           
    privatebyte[]GetLegalKey()
           
    {
               
    string sTemp =Key;
                mobjCryptoService
    .GenerateKey();
               
    byte[] bytTemp = mobjCryptoService.Key;
               
    intKeyLength= bytTemp.Length;
               
    if(sTemp.Length>KeyLength)
                    sTemp
    = sTemp.Substring(0,KeyLength);
               
    elseif(sTemp.Length<KeyLength)
                    sTemp
    = sTemp.PadRight(KeyLength,' ');
               
    returnASCIIEncoding.ASCII.GetBytes(sTemp);
           
    }
           
    /// <summary>
           
    /// 获得初始向量IV
           
    /// </summary>
           
    /// <returns>初试向量IV</returns>
           
    privatebyte[]GetLegalIV()
           
    {
               
    string sTemp ="E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
                mobjCryptoService
    .GenerateIV();
               
    byte[] bytTemp = mobjCryptoService.IV;
               
    intIVLength= bytTemp.Length;
               
    if(sTemp.Length>IVLength)
                    sTemp
    = sTemp.Substring(0,IVLength);
               
    elseif(sTemp.Length<IVLength)
                    sTemp
    = sTemp.PadRight(IVLength,' ');
               
    returnASCIIEncoding.ASCII.GetBytes(sTemp);
           
    }
           
    /// <summary>
           
    /// 加密方法
           
    /// </summary>
           
    /// <param name="Source">待加密的串</param>
           
    /// <returns>经过加密的串</returns>
           
    publicstringRijndaelEncrypt(stringSource)
           
    {
               
    byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
               
    MemoryStream ms =newMemoryStream();
                mobjCryptoService
    .Key=GetLegalKey();
                mobjCryptoService
    .IV =GetLegalIV();
               
    ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
               
    CryptoStream cs =newCryptoStream(ms, encrypto,CryptoStreamMode.Write);
                cs
    .Write(bytIn,0, bytIn.Length);
                cs
    .FlushFinalBlock();
                ms
    .Close();
               
    byte[] bytOut = ms.ToArray();
               
    returnConvert.ToBase64String(bytOut);
           
    }

           
    /// <summary>
           
    /// 解密方法
           
    /// </summary>
           
    /// <param name="Source">待解密的串</param>
           
    /// <returns>经过解密的串</returns>
           
    publicstringRijndaelDecrypt(stringSource)
           
    {
               
    try
               
    {
                   
    byte[] bytIn =Convert.FromBase64String(Source);
                   
    MemoryStream ms =newMemoryStream(bytIn,0, bytIn.Length);
                    mobjCryptoService
    .Key=GetLegalKey();
                    mobjCryptoService
    .IV =GetLegalIV();
                   
    ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
                   
    CryptoStream cs =newCryptoStream(ms, encrypto,CryptoStreamMode.Read);
                   
    StreamReader sr =newStreamReader(cs);
                   
    return sr.ReadToEnd();
               
    }
               
    catch(Exception ex)
               
    {
                   
    return ex.Message;
               
    }
           
    }
           
    #endregion


           
    #region ( 3 )Base64与UTF8混用

           
    //字符串加密
           
    publicstringBUEncrypt(string bb)
           
    {
               
    byte[]by=newbyte[bb.Length];
               
    by=System.Text.Encoding.UTF8.GetBytes(bb);

               
    string r =Convert.ToBase64String(by);
               
    return r;
           
    }

           
    //字符串解密
           
    publicstringBUDecrypt(string aa)
           
    {
               
    try
               
    {
                   
    byte[]by=Convert.FromBase64String(aa);

                   
    string r =Encoding.UTF8.GetString(by);

                   
    return r;
               
    }
               
    catch(Exception ex)
               
    {
                   
    return ex.Message;
               
    }
           
    }

           
    #endregion


           
    #region ( 4 )固定密钥算法

           
    publicstaticByte[]Iv64={11,22,33,44,55,66,77,88};

           
    publicstaticByte[] byKey64 ={10,20,30,40,50,60,70,80};
           
    //字符串加密
           
    publicstringSKeyEncrypt(string strText)
           
    {
               
    try
               
    {
                   
    DESCryptoServiceProvider des =newDESCryptoServiceProvider();
                   
    Byte[] inputByteArray =Encoding.UTF8.GetBytes(strText);
                   
    MemoryStream ms =newMemoryStream();
                   
    CryptoStream cs =newCryptoStream(ms, des.CreateEncryptor(byKey64,Iv64),CryptoStreamMode.Write);
                    cs
    .Write(inputByteArray,0, inputByteArray.Length);
                    cs
    .FlushFinalBlock();
                   
    returnConvert.ToBase64String(ms.ToArray());
               
    }
               
    catch(Exception ex)
               
    {
                   
    return ex.Message;
               
    }
           
    }

           
    //字符串解密
           
    publicstringSKeyDecrypt(string strText)
           
    {
               
    Byte[] inputByteArray =newbyte[strText.Length];
               
    try
               
    {
                   
    DESCryptoServiceProvider des =newDESCryptoServiceProvider();
                    inputByteArray
    =Convert.FromBase64String(strText);
                   
    MemoryStream ms =newMemoryStream();
                   
    CryptoStream cs =newCryptoStream(ms, des.CreateDecryptor(byKey64,Iv64),CryptoStreamMode.Write);
                    cs
    .Write(inputByteArray,0, inputByteArray.Length);
                    cs
    .FlushFinalBlock();
                   
    System.Text.Encoding encoding =System.Text.Encoding.UTF8;
                   
    return encoding.GetString(ms.ToArray());
               
    }
               
    catch(Exception ex)
               
    {
                   
    return ex.Message;
               
    }
           
    }
           
    #endregion


           
    #region ( 5 )DES算法

           
    publicstaticbyte[]DESKey=newbyte[]{0x82,0xBC,0xA1,0x6A,0xF5,0x87,0x3B,0xE6,0x59,0x6A,0x32,0x64,0x7F,0x3A,0x2A,0xBB,0x2B,0x68,0xE2,0x5F,0x06,0xFB,0xB8,0x2D,0x67,0xB3,0x55,0x19,0x4E,0xB8,0xBF,0xDD};
           
    /// <summary>
           
    /// DES加密
           
    /// </summary>
           
    /// <param name="strSource">待加密字串</param>
           
    /// <param name="key">32位Key值</param>
           
    /// <returns>加密后的字符串</returns>
           
    publicstringDESEncrypt(string strSource)
           
    {
               
    returnDESEncryptF(strSource,DESKey);
           
    }

           
    privatestringDESEncryptF(string strSource,byte[] key)
           
    {
               
    SymmetricAlgorithm sa =Rijndael.Create();
                sa
    .Key= key;
                sa
    .Mode=CipherMode.ECB;
                sa
    .Padding=PaddingMode.Zeros;
               
    MemoryStream ms =newMemoryStream();
               
    CryptoStream cs =newCryptoStream(ms, sa.CreateEncryptor(),CryptoStreamMode.Write);
               
    byte[] byt =Encoding.Unicode.GetBytes(strSource);
                cs
    .Write(byt,0, byt.Length);
                cs
    .FlushFinalBlock();
                cs
    .Close();
               
    returnConvert.ToBase64String(ms.ToArray());
           
    }

           
    /// <summary>
           
    /// DES解密
           
    /// </summary>
           
    /// <param name="strSource">待解密的字串</param>
           
    /// <param name="key">32位Key值</param>
           
    /// <returns>解密后的字符串</returns>
           
    publicstringDESDecrypt(string strSource)
           
    {
               
    returnDESDecryptF(strSource,DESKey);
           
    }

           
    privatestringDESDecryptF(string strSource,byte[] key)
           
    {
               
    try
               
    {
                   
    SymmetricAlgorithm sa =Rijndael.Create();
                    sa
    .Key= key;
                    sa
    .Mode=CipherMode.ECB;
                    sa
    .Padding=PaddingMode.Zeros;
                   
    ICryptoTransform ct = sa.CreateDecryptor();
                   
    byte[] byt =Convert.FromBase64String(strSource);
                   
    MemoryStream ms =newMemoryStream(byt);
                   
    CryptoStream cs =newCryptoStream(ms, ct,CryptoStreamMode.Read);
                   
    StreamReader sr =newStreamReader(cs,Encoding.Unicode);
                   
    return sr.ReadToEnd();
               
    }
               
    catch(Exception ex)
               
    {
                   
    return ex.Message;
               
    }
           
    }
           
    #endregion


           
    #region ( 6 )   加密密码MD5T和SHA1

           
    /// <summary>
           
    /// 加密密码MD5T和SHA1
           
    /// </summary>
           
    /// <param name="strSource">字符串</param>
           
    /// <param name="strFlag">加密类别</param>
           
    /// <param name="substringlen">加密长度</param>
           
    /// <returns></returns>
           
    ///
           
    publicstring encrypting(string strSource,int strFlag,int substringlen)
           
    {
               
    string ss ="";
               
    if(strFlag ==1)///MD5加密
               
    {
                   
    if(substringlen ==16)//16位MD5加密(取32位加密的9~25字符)
                   
    {
                        ss
    =FormsAuthentication.HashPasswordForStoringInConfigFile(strSource,"MD5").ToLower().Substring(8,16);
                   
    }
                   
    elseif(substringlen ==32)//32位加密
                   
    {
                        ss
    =FormsAuthentication.HashPasswordForStoringInConfigFile(strSource,"MD5").ToLower();
                   
    }
               
    }
               
    elseif(strFlag ==2)///SHA1加密
               
    {
                   
    if(substringlen ==16)//SHA1 16位加密
                   
    {
                        ss
    =FormsAuthentication.HashPasswordForStoringInConfigFile(strSource,"SHA1").ToLower().Substring(8,16);
                   
    }
                   
    elseif(substringlen ==32)//SHA1 40位加密
                   
    {
                        ss
    =FormsAuthentication.HashPasswordForStoringInConfigFile(strSource,"SHA1").ToLower();
                   
    }
               
    }
               
    else
               
    {
                    ss
    ="";
               
    }
               
    return ss;
           
    }

           
    #endregion
       
    }
    }
  • 相关阅读:
    Innodb存储引擎
    Innodb学习之MySQL体系结构
    C# sql查询数据库返回单个值方法
    Welcome To SWPUNC-ACM
    P2184 贪婪大陆 题解
    线上Java调优-Arthas入门
    JVM调优学习笔记
    RabbitMQ博文收藏
    System.Net.WebException: 远程服务器返回错误: (405) 不允许的方法。
    随机过程-Brown运动
  • 原文地址:https://www.cnblogs.com/zcttxs/p/2650384.html
Copyright © 2011-2022 走看看