base64 小测试:

base64工作原理:
Base64是MIME邮件中常用的编码方式之一。它的主要思想是将输入的字符串或数据编码成只含有{‘A‘-‘Z‘, ‘a‘-‘z‘,
‘0‘-‘9‘, ‘+‘, ‘/‘}这64个可打印字符的串,故称为“Base64”。
Base64编码的方法是,将输入数据流每次取6 bit,用此6 bit的值(0-63)作为索引去查表,输出相应字符。这样,每3个字节将
编码为4个字符(3×8 → 4×6);不满4个字符的以‘=‘填充。

c#把字符串转换成64位方法

先转换 2进制流:

可以根据系统自带的方法:

 string name = "abcdefg";
            byte[] bytes=Encoding.Default.GetBytes(name);//获取字节流
            StringBuilder ll = new StringBuilder();//可变字符串
            for (int i = 0; i < name.Length; i++)//循环转换2进制流
            {
                string data1 = Convert.ToString(bytes[i],2) .PadLeft(8, '0');
                ll.Append(data1);
            }
            string result = ll.ToString();

 结果:01100001011000100110001101100100011001010110011001100111

也可以自己写:

下面这个没有做循环所以只能先把字符串转出ascii然后输入;

 public static string to2(int value)
        {
            //先取得2进制位
            int yushu;//所得余数
            StringBuilder s = new StringBuilder("");
            while (true)
            {
                if (value <= 1)
                {
                    s.Append(value);
                    break;
                }
                yushu = value % 2;
                s.Append(yushu);
                value = (int)(value / 2);//把商赋值给value
            }
            //排序
            int changdu = s.Length;
            string result = "";
            int eightchang = (changdu + 3) / 4;
            for (int i = changdu; i > 0; i--)
            {
                result += s[i - 1];
            }
            return result.PadLeft(eightchang * 4, '0');//不足当前长度左边用0补齐
        }

运行结果: to('a')=01100001

得到2进制流然后进行base64转换:

方法有点冗余.懂方法就行了;

 public static string to64(string value)
        {
            int buqi = (value.Length + 5) / 6;//判断长度并对字符串进行6位补齐 要为6的倍数
            value = value.PadRight(6 * buqi, '0');
            StringBuilder s64 = new StringBuilder("");
            while (true)
            {
                if (value.Length == 0)
                {
                    break;
                }
                string jiequ = value.Substring(0, 6);
                char zhengshu =base64(Convert.ToInt32(jiequ, 2));//装换成10进制并求值
                if (zhengshu == '!')
                {
                    Console.WriteLine("异常二进制串"+jiequ);
                }
                s64.Append(zhengshu);
                value = value.Substring(6);
            }
            if (buqi <= 4)
            {
                return s64.ToString().PadRight(4, '=');//用=号在右边补齐
            }
            else
            {
                buqi = (int)(buqi + 5) / 6;//base64位的都是4的倍数.所以要适当位数=补齐操作;
                return s64.ToString().PadRight(buqi * 6, '=');
            }
        }
        //对64进行相应解码:下面是对照ascii码解码的,也可以全部写出了解码;
        public static char base64(int value)
        {
            if (value <= 25)
            {
                return (Char)(value + 65);
            }

            else if (25 < value && value <= 51)
            {
                return (Char)(value + 71);
            }
            else if (51 < value && value < 61)
            {
                return (char)(value - 3);
            }
            else if (value == 62)
            {
                return '+';
            }
            else if (value == 63)
            {
                return '/';
            }
            else
            {
                return '!';
            }
        }

 

base64位的字符对照表:

posted @ 2016-12-27 16:28  国产小品牌  阅读(405)  评论(0编辑  收藏  举报