ASP.NET----符号化された静的クラスはデータの暗号化を実現する

5418 ワード

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

    }

}