Base64

        private string Encode(string str)

        {

            byte[] buffer = Encoding.Default.GetBytes(str);



            byte b1, b2, b3, c1, c2, c3, c4;

            string mes = string.Empty;

            int count = buffer.Length / 3;

            int resst = buffer.Length % 3;



            for (int i = 0; i < count; i++)

            {

                int j = i * 3;

                b1 = buffer[j];

                b2 = buffer[j + 1];

                b3 = buffer[j + 2];



                c1 = (byte)(b1 >> 2);

                c2 = (byte)(((b1 & 3) << 4) + (b2 >> 4));

                c3 = (byte)(((b2 & 15) << 2) + (b3 >> 6));

                c4 = (byte)(b3 & 63);

                mes += GetChar(c1, c2, c3, c4);

            }



            if (resst == 1)

            {

                b1 = buffer[buffer.Length - 1];

                c1 = (byte)(b1 >> 2);

                c2 = (byte)((b1 & 3) << 4);

                c3 = 64;

                c4 = 64;

                mes += GetChar(c1, c2, c3, c4);

            }

            else if (resst == 2)

            {

                b1 = buffer[buffer.Length - 2];

                b2 = buffer[buffer.Length - 1];

                c1 = (byte)(b1 >> 2);

                c2 = (byte)(((b1 & 3) << 4) + (b2 >> 4));

                c3 = (byte)((b2 & 15) << 2);

                c4 = 64;

                mes += GetChar(c1, c2, c3, c4);

            }



            return mes;

        }



        private string Decode(string str)

        {

            byte[] buffer = Encoding.Default.GetBytes(str);



            byte b1, b2, b3, c1, c2, c3, c4;

            string mes = string.Empty;

            int count = buffer.Length / 4;

            int resst = buffer.Length % 4;



            for (int i = 0; i < count; i++)

            {

                int j = i * 4;

                c1 = GetIndex(buffer[j]);

                c2 = GetIndex(buffer[j + 1]);

                c3 = GetIndex(buffer[j + 2]);

                c4 = GetIndex(buffer[j + 3]);



                b1 = (byte)((c1 << 2) + (c2 >> 4));

                if (c3 != 64 && c4 != 64)

                {

                    b2 = (byte)(((c2 & 15) << 4) + (c3 >> 2));

                    b3 = (byte)(((c3 & 3) << 6) + c4);

                    mes += Convert.ToChar(b1);

                    mes += Convert.ToChar(b2);

                    mes += Convert.ToChar(b3);

                }

                else if (c3 != 64 && c4 == 64)

                {

                    b2 = (byte)(((c2 & 15) << 4) + (c3 >> 2));

                    mes += Convert.ToChar(b1);

                    mes += Convert.ToChar(b2);

                }

                else

                    mes += Convert.ToChar(b1);

            }



            return mes;

        }



        private string GetChar(byte c1, byte c2, byte c3, byte c4)

        {

            return new string(new char[] { cs[c1], cs[c2], cs[c3], cs[c4] });

        }



        private byte GetIndex(byte c)

        {

            for (byte i = 0; i < cs.Length; i++)

            {

                if (c == cs[i])

                    return i;

            }

            return 0;

        }

 

        private char[] cs = 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',

            '+','/','='};

 

你可能感兴趣的:(base64)