文章出處

加密后生成Base64字符串,并去除'='字符。

加密后替換掉'+',這樣加密后的字符串可以作為url參數傳遞。

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace QuaEdu.Helper
{
    /// <summary>
    /// DES加密/解密類/// </summary>
    public class DESHelper
    {
        #region 默認密鑰
        /// <summary>
        /// 默認密鑰
        /// </summary>
        private static readonly string m_key = "zcl";
        #endregion

        #region ========加密========
        /// <summary> 
        /// 加密數據 
        /// </summary> 
        /// <param name="Text">原文</param> 
        /// <returns>密文</returns> 
        public static string Encrypt(string Text)
        {
            return Encrypt(Text, m_key);
        }

        /// <summary> 
        /// 加密數據 
        /// </summary> 
        /// <param name="Text">原文</param> 
        /// <param name="sKey">密鑰</param> 
        /// <returns>密文</returns> 
        public static string Encrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider desKey = new DESCryptoServiceProvider();

            byte[] inputByteArray = Encoding.Default.GetBytes(Text);
            byte[] keyByteArray = Encoding.Default.GetBytes(sKey);

            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            md5.ComputeHash(keyByteArray);

            desKey.Key = HalveByteArray(md5.Hash);
            desKey.IV = HalveByteArray(md5.Hash);

            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, desKey.CreateEncryptor(), CryptoStreamMode.Write);

            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();

            return Convert.ToBase64String(ms.ToArray()).Replace("=", "").Replace("+", "-").Replace("/", "*");
        }
        #endregion

        #region ========解密========
        /// <summary> 
        /// 解密數據 
        /// </summary> 
        /// <param name="Text">密文</param> 
        /// <returns>原文</returns> 
        public static string Decrypt(string Text)
        {
            return Decrypt(Text, m_key);
        }

        /// <summary> 
        /// 解密數據 
        /// </summary> 
        /// <param name="Text">密文</param> 
        /// <param name="sKey">密鑰</param> 
        /// <returns>原文</returns> 
        public static string Decrypt(string Text, string sKey)
        {
            StringBuilder sb = new StringBuilder();
            if (Text.Length % 4 != 0)
            {
                for (int i = 0; i < 4 - Text.Length % 4; i++)
                {
                    sb.Append("=");
                }
            }
            Text = Text.Replace("-", "+").Replace("*", "/") + sb.ToString();

            DESCryptoServiceProvider desKey = new DESCryptoServiceProvider();

            byte[] inputByteArray = Convert.FromBase64String(Text);
            byte[] keyByteArray = Encoding.Default.GetBytes(sKey);

            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            md5.ComputeHash(keyByteArray);

            desKey.Key = HalveByteArray(md5.Hash);
            desKey.IV = HalveByteArray(md5.Hash);

            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, desKey.CreateDecryptor(), CryptoStreamMode.Write);

            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();

            return Encoding.Default.GetString(ms.ToArray());
        }
        #endregion

        #region 把字節數組縮短一半
        /// <summary>
        /// 把字節數組縮短一半
        /// </summary>
        private static byte[] HalveByteArray(byte[] data)
        {
            byte[] result = new byte[data.Length / 2];

            for (int i = 0; i < result.Length; i++)
            {
                int x = (data[i * 2] + data[i * 2 + 1]) / 2;
                result[i] = (byte)x;
            }

            return result;
        }
        #endregion

    }
}

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()