ASP.NET

作者:互联网   出处:控件中国网   2014-11-05 19:05:24   阅读:1

ASP.NET----编解码的静态类实现数据的加密

using System.Security.Cryptography; 

using System.IO; 

using System; 

using System.Text; 

  

namespace Core.Common.Tool 

    /// <summary> 

    /// 用于编解码的静态类 

    /// </summary> 

    public static class Code 

    { 

        #region 变量定义 

  

        /// <summary> 

        /// 对称算法基类 

        /// </summary> 

        private static SymmetricAlgorithm mobjCryptoService; 

        /// <summary> 

        /// 编码字符串 

        /// </summary> 

        private static string Key; 

  

        #endregion 

  

        #region 构造函数 

  

        /// <summary>     

        /// 对称加密类的构造函数     

        /// </summary>     

        static Code() 

        { 

            mobjCryptoService = new RijndaelManaged(); 

            Key = "Guz(%&hj7x89H$yuCORE56FtmaT8&fvHCFCy76*h%(HilJ$lhj!y6&(*jkP87jH7"; 

        } 

  

        #endregion 

  

        #region 方法 

  

        #region 对称加密 

  

        /// <summary>     

        /// 获得密钥     

        /// </summary>     

        /// <returns>密钥</returns>     

        private static byte[] GetLegalKey() 

        { 

            string sTemp = Key; 

            mobjCryptoService.GenerateKey(); 

            byte[] bytTemp = mobjCryptoService.Key; 

            int KeyLength = bytTemp.Length; 

            if (sTemp.Length > KeyLength) 

                sTemp = sTemp.Substring(0, KeyLength); 

            else if (sTemp.Length < KeyLength) 

                sTemp = sTemp.PadRight(KeyLength, ' '); 

            return ASCIIEncoding.ASCII.GetBytes(sTemp); 

        } 

  

        /// <summary>     

        /// 获得初始向量IV     

        /// </summary>     

        /// <returns>初试向量IV</returns>     

        private static byte[] GetLegalIV() 

        { 

            string sTemp = "E4ghj*Ghg7!rNIfb&95CORE6GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; 

            mobjCryptoService.GenerateIV(); 

            byte[] bytTemp = mobjCryptoService.IV; 

            int IVLength = bytTemp.Length; 

            if (sTemp.Length > IVLength) 

                sTemp = sTemp.Substring(0, IVLength); 

            else if (sTemp.Length < IVLength) 

                sTemp = sTemp.PadRight(IVLength, ' '); 

            return ASCIIEncoding.ASCII.GetBytes(sTemp); 

        } 

  

        /// <summary>     

        /// 加密方法     

        /// </summary>     

        /// <param name="Source">待加密的串</param>     

        /// <returns>经过加密的串</returns>     

        public static string EncryptCode(string Source) 

        { 

            byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source); 

            MemoryStream ms = new MemoryStream(); 

            mobjCryptoService.Key = GetLegalKey(); 

            mobjCryptoService.IV = GetLegalIV(); 

            ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor(); 

            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); 

            cs.Write(bytIn, 0, bytIn.Length); 

            cs.FlushFinalBlock(); 

            ms.Close(); 

            byte[] bytOut = ms.ToArray(); 

            return Convert.ToBase64String(bytOut); 

        } 

  

        /// <summary>     

        /// 解密方法     

        /// </summary>     

        /// <param name="Source">待解密的串</param>     

        /// <returns>经过解密的串</returns>     

        public static string DecryptCode(string Source) 

        { 

            byte[] bytIn = Convert.FromBase64String(Source); 

            MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); 

            mobjCryptoService.Key = GetLegalKey(); 

            mobjCryptoService.IV = GetLegalIV(); 

            ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor(); 

            CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); 

            StreamReader sr = new StreamReader(cs); 

            return sr.ReadToEnd(); 

        } 

  

        #endregion 

  

        #region 简单字符串加密 

  

        /// <summary> 

        /// 倒序加1加密 

        /// </summary> 

        /// <param name="rs">明文</param> 

        /// <returns>密文</returns> 

        public static string EncryptStringSimple(string rs)  

        { 

            byte[] by = new byte[rs.Length]; 

            for (int i = 0; i < rs.Length; i++) 

            { 

                by[i] = (byte)((byte)rs[i] + 1); 

            } 

            rs = ""; 

            for (int i = by.Length - 1; i >= 0; i--) 

            { 

                rs += ((char)by[i]).ToString(); 

            } 

            return rs; 

        } 

  

        /// <summary> 

        /// 顺序减1解码  

        /// </summary> 

        /// <param name="rs">密文</param> 

        /// <returns>明文</returns> 

        public static string DecryptStringSimple(string rs) 

        { 

            byte[] by = new byte[rs.Length]; 

            for (int i = 0; i <= rs.Length - 1; i++) 

            { 

                by[i] = (byte)((byte)rs[i] - 1); 

            } 

            rs = ""; 

            for (int i = by.Length - 1; i >= 0; i--) 

            { 

                rs += ((char)by[i]).ToString(); 

            } 

            return rs; 

        } 

  

        #endregion 

  

        #endregion 

    } 

}

 

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat