using System.Collections;
using System.Text;

namespace DataSharing.YiBin.Enterprise
{
    public static class Encoder
    {
        /// <summary>
        /// 对string 进行 Base64 编码 
        /// </summary>
        /// <param name="strMessage">string 参数</param>
        /// <returns> Base64 编码</returns>
        public static string Base64Code(string strMessage)
        {
            bool flag = string.IsNullOrEmpty(strMessage);
            string result;
            if (flag)
            {
                result = "";
            }
            else
            {
                char[] array = new char[]
                {
            'A',
            'B',
            'C',
            'D',
            'E',
            'F',
            'G',
            'H',
            'I',
            'J',
            'K',
            'L',
            'M',
            'N',
            'O',
            'P',
            'Q',
            'R',
            'S',
            'T',
            'U',
            'V',
            'W',
            'X',
            'Y',
            'Z',
            'a',
            'b',
            'c',
            'd',
            'e',
            'f',
            'g',
            'h',
            'i',
            'j',
            'k',
            'l',
            'm',
            'n',
            'o',
            'p',
            'q',
            'r',
            's',
            't',
            'u',
            'v',
            'w',
            'x',
            'y',
            'z',
            '0',
            '1',
            '2',
            '3',
            '4',
            '5',
            '6',
            '7',
            '8',
            '9',
            '+',
            '/',
            '='
                };
                byte b = 0;
                ArrayList arrayList = new ArrayList(Encoding.Default.GetBytes(strMessage));
                int count = arrayList.Count;
                int num = count / 3;
                int num2 = count % 3;
                bool flag2 = num2 > 0;
                if (flag2)
                {
                    for (int i = 0; i < 3 - num2; i++)
                    {
                        arrayList.Add(b);
                    }
                    num++;
                }
                StringBuilder stringBuilder = new StringBuilder(num * 4);
                for (int i = 0; i < num; i++)
                {
                    byte[] array2 = new byte[]
                    {
                (byte)arrayList[i * 3],
                (byte)arrayList[i * 3 + 1],
                (byte)arrayList[i * 3 + 2]
                    };
                    int[] array3 = new int[4];
                    array3[0] = array2[0] >> 2;
                    array3[1] = ((int)(array2[0] & 3) << 4 ^ array2[1] >> 4);
                    bool flag3 = !array2[1].Equals(b);
                    if (flag3)
                    {
                        array3[2] = ((int)(array2[1] & 15) << 2 ^ array2[2] >> 6);
                    }
                    else
                    {
                        array3[2] = 64;
                    }
                    bool flag4 = !array2[2].Equals(b);
                    if (flag4)
                    {
                        array3[3] = (int)(array2[2] & 63);
                    }
                    else
                    {
                        array3[3] = 64;
                    }
                    stringBuilder.Append(array[array3[0]]);
                    stringBuilder.Append(array[array3[1]]);
                    stringBuilder.Append(array[array3[2]]);
                    stringBuilder.Append(array[array3[3]]);
                }
                string text = stringBuilder.ToString();
                text = text.Replace("=", "@");
                text = text.Replace("+", "%2B");
                result = text;
            }
            return result;
        }
    }
}
