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
        }
    }
    
  • 相关阅读:
    爬虫之JSON
    爬虫bs4案例
    爬虫bs4
    爬虫之Xpath案例
    爬虫之xpath
    监控 Kubernetes 集群应用
    手动部署k8s-prometheus
    ingress之tls和path使用
    ingress安装配置
    kube-dns和coreDNS的使用
  • 原文地址:https://www.cnblogs.com/xiaofengfeng/p/2810496.html
Copyright © 2011-2022 走看看