1. 程式人生 > >ASP.NET 常用的字符串加密

ASP.NET 常用的字符串加密

right 定義 tor sub eat rst 三種 password fin

字符串常用的加密有三種

1、MD5加密,這個常用於密碼,單向加密,不可解密,有些在線解密的可以解大部份,用代碼不能實現,如果不想讓人解密,加密後隨便截取一段就好了;

2、Base64位加密,通常加密後字符串尾會有兩個 == ,可解密;

3、SHA加密,單向加密,安全性沒MD5好。

以上不可解密都是相對的,這些加密算法都是跨平臺的。

        
        using System.Web.Security;
        using System.Security.Cryptography;

        /// <summary>
        /// MD5函數
        /// </summary>
        /// <param name="val">原始字符串</param>
        /// <returns>MD5結果</returns>
        public static string MD5String(string val)
        {
            if (val.Trim().Equals(String.Empty) == true)
                return String.Empty;

            byte[] b = Encoding.UTF8.GetBytes(val);
            b = new MD5CryptoServiceProvider().ComputeHash(b);
            string ret = String.Empty;
            for (int i = 0; i < b.Length; i++)
                ret += b[i].ToString("x").PadLeft(2, ‘0‘);

            return ret;
        }

        /// <summary>
        /// SHA1字符串加密
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string SHA1(string obj)
        {
            return FormsAuthentication.HashPasswordForStoringInConfigFile(obj, "SHA1");
        }

        /// <summary>
        /// SHA256字符串加密
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string SHA256(string obj)
        {
            //return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(obj, "SHA256");
            byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(obj);
            SHA256 sha256 = new SHA256Managed();
            byte[] retVal = sha256.ComputeHash(bytValue);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < retVal.Length; i++)
            {
                sb.Append(retVal[i].ToString("x2"));
            }
            return sb.ToString();
        }

         /// <summary>
        /// Base64位加密
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public static string EncryptBase64(string val)
        {
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(val));
        }

        /// <summary>
        /// Base64位解密
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public static string DecryptBase64(string val)
        {
            return Encoding.Default.GetString(Convert.FromBase64String(val));
        }

        /// <summary>
        /// BASE64位(MD5加密)[標準,非MD5加密再BASE64位加密]
        /// </summary>
        /// <param name="val">原始字符串</param>
        /// <returns>MD5結果</returns>
        public static string EncryptBase64AndMD5(string val)
        {
            if (val.Trim().Equals(String.Empty) == true)
                return String.Empty;

            MD5CryptoServiceProvider MD5CSP = new MD5CryptoServiceProvider();
            return Convert.ToBase64String(MD5CSP.ComputeHash(Encoding.UTF8.GetBytes(val)));
        }

     

也可以定義一個KEY,自定義加密算法

        /// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="encryptString">待加密的字符串</param>
        /// <param name="encryptKey">加密密鑰,要求為8位</param>
        /// <returns>加密成功返回加密後的字符串,失敗返回源串</returns>
        public static string Encode(string encryptString, string encryptKey)
        {
            encryptKey = UtilsString.SubString(encryptKey, 8);
            encryptKey = encryptKey.PadRight(8, ‘ ‘);
            byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
            byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
            byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
            DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
            MemoryStream mStream = new MemoryStream();
            CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
            cStream.Write(inputByteArray, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();
            return Convert.ToBase64String(mStream.ToArray());
        }

        /// <summary>
        /// DES解密字符串
        /// </summary>
        /// <param name="decryptString">待解密的字符串</param>
        /// <param name="decryptKey">解密密鑰,要求為8位,和加密密鑰相同</param>
        /// <returns>解密成功返回解密後的字符串,失敗返源串</returns>
        public static string Decode(string decryptString, string decryptKey)
        {
            decryptKey = UtilsString.SubString(decryptKey, 8);
            decryptKey = decryptKey.PadRight(8, ‘ ‘);
            byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
            byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
            byte[] inputByteArray = Convert.FromBase64String(decryptString);
            DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();

            MemoryStream mStream = new MemoryStream();
            CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
            cStream.Write(inputByteArray, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();
            return Encoding.UTF8.GetString(mStream.ToArray());
        }

  

ASP.NET 常用的字符串加密