zoukankan      html  css  js  c++  java
  • Asp.Net 加密解密

    #region DES加密解密
           
    ///<summary>
           
    /// DES加密
           
    ///</summary>
           
    ///<param name="strSource">待加密字串</param>
           
    ///<param name="key">32位Key值</param>
           
    ///<returns>加密后的字符串</returns>
            publicstring DESEncrypt(string strSource)
            {
               
    return DESEncrypt(strSource, DESKey);
            }
           
    publicstring DESEncrypt(string strSource, byte[] key)
            {
                SymmetricAlgorithm sa
    = Rijndael.Create();
                sa.Key
    = key;
                sa.Mode
    = CipherMode.ECB;
                sa.Padding
    = PaddingMode.Zeros;
                MemoryStream ms
    =new MemoryStream();
                CryptoStream cs
    =new CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write);
               
    byte[] byt = Encoding.Unicode.GetBytes(strSource);
                cs.Write(byt,
    0, byt.Length);
                cs.FlushFinalBlock();
                cs.Close();
               
    return Convert.ToBase64String(ms.ToArray());
            }
           
    ///<summary>
           
    /// DES解密
           
    ///</summary>
           
    ///<param name="strSource">待解密的字串</param>
           
    ///<param name="key">32位Key值</param>
           
    ///<returns>解密后的字符串</returns>
            publicstring DESDecrypt(string strSource)
            {
               
    return DESDecrypt(strSource, DESKey);
            }
           
    publicstring DESDecrypt(string strSource, byte[] key)
            {
                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
    =new MemoryStream(byt);
                CryptoStream cs
    =new CryptoStream(ms, ct, CryptoStreamMode.Read);
                StreamReader sr
    =new StreamReader(cs, Encoding.Unicode);
               
    return sr.ReadToEnd();
            }
           
    #endregion

           
    #region 一个用hash实现的加密解密方法
           
    ///<summary>
           
    /// 加密
           
    ///</summary>
           
    ///<param name="src"></param>
           
    ///<returns></returns>
            publicstaticstring EncryptStrByHash(string src)
            {
               
    if (src.Length ==0)
                {
                   
    return"";
                }
               
    byte[] HaKey = System.Text.Encoding.ASCII.GetBytes((src +"Test").ToCharArray());
               
    byte[] HaData =newbyte[20];
                HMACSHA1 Hmac
    =new HMACSHA1(HaKey);
                CryptoStream cs
    =new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write);
               
    try
                {
                    cs.Write(HaData,
    0, HaData.Length);
                }
               
    finally
                {
                    cs.Close();
                }
               
    string HaResult = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16);
               
    byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray());
               
    byte[] RiDataBuf = System.Text.Encoding.ASCII.GetBytes(src.ToCharArray());
               
    byte[] EncodedBytes =   { };
                MemoryStream ms
    =new MemoryStream();
                RijndaelManaged rv
    =new RijndaelManaged();
                cs
    =new CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey), CryptoStreamMode.Write);
               
    try
                {
                    cs.Write(RiDataBuf,
    0, RiDataBuf.Length);
                    cs.FlushFinalBlock();
                    EncodedBytes
    = ms.ToArray();
                }
               
    finally
                {
                    ms.Close();
                    cs.Close();
                }
               
    return HaResult + System.Convert.ToBase64String(EncodedBytes);
            }

           
    ///<summary>
           
    /// 解密
           
    ///</summary>
           
    ///<param name="src"></param>
           
    ///<returns></returns>
            publicstaticstring DecrypStrByHash(string src)
            {
               
    if (src.Length <40) return"";
               
    byte[] SrcBytes = System.Convert.FromBase64String(src.Substring(16));
               
    byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(src.Substring(0, 16).ToCharArray());
               
    byte[] InitialText =newbyte[SrcBytes.Length];
                RijndaelManaged rv
    =new RijndaelManaged();
                MemoryStream ms
    =new MemoryStream(SrcBytes);
                CryptoStream cs
    =new CryptoStream(ms, rv.CreateDecryptor(RiKey, RiKey), CryptoStreamMode.Read);
               
    try
                {
                    cs.Read(InitialText,
    0, InitialText.Length);
                }
               
    finally
                {
                    ms.Close();
                    cs.Close();
                }
                System.Text.StringBuilder Result
    =new System.Text.StringBuilder();
               
    for (int i =0; i < InitialText.Length; ++i) if (InitialText[i] >0) Result.Append((char)InitialText[i]);
               
    return Result.ToString();
            }

           
    ///<summary>
           
    /// 对加密后的密文重新编码,如果密文长>16,则去掉前16个字符,如果长度小于16,返回空字符串
           
    ///</summary>
           
    ///<param name="s"></param>
           
    ///<returns></returns>
            publicstring ReEncryptStrByHash(string s)
            {
               
    string e = Encrypt.EncryptStrByHash(s);
               
    return ((e.Length >16) ? e.Substring(16) : "");
            }
           
    #endregion

           
    #region Md5加密,生成16位或32位,生成的密文都是大写
           
    publicstaticstring Md5To16(string str)
            {
                MD5CryptoServiceProvider md5
    =new MD5CryptoServiceProvider();
               
    string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str)), 4, 8);
                t2
    = t2.Replace("-", "");
               
    return t2;
            }

           
    //// <summary>
           
    /// MD5 32位加密
           
    ///</summary>
           
    ///<param name="str"></param>
           
    ///<returns></returns>
            publicstaticstring Md5To32(string str)
            {
               
    string pwd ="";
                MD5 md5
    = MD5.Create();
               
    byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
               
    for (int i =0; i < s.Length; i++)
                {
                    pwd
    = pwd + s[i].ToString("X");
                }
               
    return pwd;
            }
           
    #endregion

           
    #region 3DES加密解密
           
    publicstring Encrypt3DES(string str)
            {
               
    //密钥
                string sKey ="wyw308";
               
    //    //矢量,可为空
                string sIV ="scf521";
               
    //    //构造对称算法
                SymmetricAlgorithm mCSP =new TripleDESCryptoServiceProvider();

                ICryptoTransform ct;
                MemoryStream ms;
                CryptoStream cs;
               
    byte[] byt;
                mCSP.Key
    = Convert.FromBase64String(sKey);
                mCSP.IV
    = Convert.FromBase64String(sIV);
                mCSP.Mode
    = System.Security.Cryptography.CipherMode.ECB;
                mCSP.Padding
    = System.Security.Cryptography.PaddingMode.PKCS7;
                ct
    = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
                byt
    = Encoding.UTF8.GetBytes(str);
                ms
    =new MemoryStream();
                cs
    =new CryptoStream(ms, ct, CryptoStreamMode.Write);
                cs.Write(byt,
    0, byt.Length);
                cs.FlushFinalBlock();
                cs.Close();
               
    return Convert.ToBase64String(ms.ToArray());
            }
           
    ///<summary>
           
    /// 带指定密钥和矢量的3DES加密
           
    ///</summary>
           
    ///<param name="str"></param>
           
    ///<param name="sKey"></param>
           
    ///<param name="sIV"></param>
           
    ///<returns></returns>
            publicstring Encrypt3DES(string str, string sKey, string sIV)
            {
                SymmetricAlgorithm mCSP
    =new TripleDESCryptoServiceProvider();
                ICryptoTransform ct;
                MemoryStream ms;
                CryptoStream cs;
               
    byte[] byt;
                mCSP.Key
    = Convert.FromBase64String(sKey);
                mCSP.IV
    = Convert.FromBase64String(sIV);
                mCSP.Mode
    = System.Security.Cryptography.CipherMode.ECB;
                mCSP.Padding
    = System.Security.Cryptography.PaddingMode.PKCS7;
                ct
    = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
                byt
    = Encoding.UTF8.GetBytes(str);
                ms
    =new MemoryStream();
                cs
    =new CryptoStream(ms, ct, CryptoStreamMode.Write);
                cs.Write(byt,
    0, byt.Length);
                cs.FlushFinalBlock();
                cs.Close();
               
    return Convert.ToBase64String(ms.ToArray());
            }

           
    //解密
            publicstring Decrypt3DES(string Value)
            {
               
    string sKey ="wyw308";
               
    string sIV ="scf521";
                SymmetricAlgorithm mCSP
    =new TripleDESCryptoServiceProvider();
                ICryptoTransform ct;
                MemoryStream ms;
                CryptoStream cs;
               
    byte[] byt;
                mCSP.Key
    = Convert.FromBase64String(sKey);
                mCSP.IV
    = Convert.FromBase64String(sIV);
                mCSP.Mode
    = System.Security.Cryptography.CipherMode.ECB;
                mCSP.Padding
    = System.Security.Cryptography.PaddingMode.PKCS7;
                ct
    = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
                byt
    = Convert.FromBase64String(Value);
                ms
    =new MemoryStream();
                cs
    =new CryptoStream(ms, ct, CryptoStreamMode.Write);
                cs.Write(byt,
    0, byt.Length);
                cs.FlushFinalBlock();
                cs.Close();
               
    return Encoding.UTF8.GetString(ms.ToArray());
            }
           
    ///<summary>
           
    /// 带指定密钥和矢量的3DES解密
           
    ///</summary>
           
    ///<param name="Value"></param>
           
    ///<param name="sKey"></param>
           
    ///<param name="sIV"></param>
           
    ///<returns></returns>
            publicstring Decrypt3DES(string str, string sKey, string sIV)
            {
                SymmetricAlgorithm mCSP
    =new TripleDESCryptoServiceProvider();
                ICryptoTransform ct;
                MemoryStream ms;
                CryptoStream cs;
               
    byte[] byt;
                mCSP.Key
    = Convert.FromBase64String(sKey);
                mCSP.IV
    = Convert.FromBase64String(sIV);
                mCSP.Mode
    = System.Security.Cryptography.CipherMode.ECB;
                mCSP.Padding
    = System.Security.Cryptography.PaddingMode.PKCS7;
                ct
    = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
                byt
    = Convert.FromBase64String(str);
                ms
    =new MemoryStream();
                cs
    =new CryptoStream(ms, ct, CryptoStreamMode.Write);
                cs.Write(byt,
    0, byt.Length);
                cs.FlushFinalBlock();
                cs.Close();
               
    return Encoding.UTF8.GetString(ms.ToArray());
            }
           
    #endregion

           
    #region 一个简单的加密解密方法,只支持英文
           
    publicstaticstring EnCryptEnStr(string str) //倒序加1加密
            {
               
    byte[] by =newbyte[str.Length];
               
    for (int i =0;
                 i
    <= str.Length -1;
                 i
    ++)
                {
                    by[i]
    = (byte)((byte)str[i] +1);
                }
                str
    ="";
               
    for (int i = by.Length -1;
                 i
    >=0;
                 i
    --)
                {
                    str
    += ((char)by[i]).ToString();
                }
               
    return str;
            }
           
    publicstaticstring DeCryptEnStr(string str) //顺序减1解码
            {
               
    byte[] by =newbyte[str.Length];
               
    for (int i =0;
                 i
    <= str.Length -1;
                 i
    ++)
                {
                    by[i]
    = (byte)((byte)str[i] -1);
                }
                str
    ="";
               
    for (int i = by.Length -1;
                 i
    >=0;
                 i
    --)
                {
                    str
    += ((char)by[i]).ToString();
                }
               
    return str;
            }
           
    #endregion

           
    #region 一个简单的加密解密方法,在上一个的基础上支持中文
           
    publicstaticstring EnCryptCnStr(string str)
            {
               
    string htext =""; // blank text

               
    for (int i =0; i < str.Length; i++)
                {
                    htext
    = htext + (char)(str[i] +10-1*2);
                }
               
    return htext;
            }

           
    publicstaticstring DeCryptCnStr(string str)
            {
               
    string dtext ="";

               
    for (int i =0; i < str.Length; i++)
                {
                    dtext
    = dtext + (char)(str[i] -10+1*2);
                }
               
    return dtext;
            }
           
    #endregion

           
    #region Url地址编码解码

           
    ///<summary>
           
    /// 编码Url地址
           
    ///</summary>
           
    ///<param name="url"></param>
           
    ///<returns></returns>
            publicstaticstring UrlEncode(string url)
            {
               
    byte[] mByte =null;
                mByte
    = System.Text.Encoding.GetEncoding("GB2312").GetBytes(url);

               
    return System.Web.HttpUtility.UrlEncode(mByte);
            }

           
    ///<summary>
           
    /// 解码Url地址
           
    ///</summary>
           
    ///<param name="url"></param>
           
    ///<returns></returns>
            publicstaticstring UrlDecode(string url)
            {
               
    return HttpUtility.UrlDecode(url, System.Text.Encoding.GetEncoding("GB2312"));
            }
           
    #endregion

  • 相关阅读:
    使用BigDecimal进行精确运算
    Hibernate读书笔记数据过滤
    Hibernate读书笔记Hibernate的关联映射之1N关联映射
    bernate读书笔记条件查询
    Hibernate读书笔记Hibernate的关联映射之NN关联映射
    Hibernate读书笔记缓存
    Hibernate读书笔记事件机制
    解决拦截器的对于参数传递无效问题
    Hibernate读书笔记SQL查询
    Hibernate读书笔记Hibernate的关联映射之组件属性关联关系
  • 原文地址:https://www.cnblogs.com/toddzhang/p/3376117.html
Copyright © 2011-2022 走看看