Base64的编码规则和C#实现

Posted bcbobo21cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Base64的编码规则和C#实现相关的知识,希望对你有一定的参考价值。

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一;

Base64的编码规则
    Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。
    它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。
    当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。

BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

    三个字节base64编码后变为4个字节;解码又还原;下面来看一下;

        private void button1_Click(object sender, EventArgs e)
        {
            byte[] bytes = Encoding.Default.GetBytes("一系列");
            string str = Convert.ToBase64String(bytes);
            textBox1.Text = "一系列";
            textBox2.Text = str;

            //textBox3.Text = System.Text.Encoding.Default.GetString(bytes);
            string binary1="";
            for (int i = 0; i < bytes.Length; i++)
            {
                binary1 = binary1 + Convert.ToString(bytes[i], 2) + Environment.NewLine;
            }
            textBox3.Text = binary1;

            byte[] bytes2 = Encoding.Default.GetBytes(str);
            string binary2 = "";
            for (int i = 0; i < bytes2.Length; i++)
            {
                binary2 = binary2 + Convert.ToString(bytes2[i], 2) + Environment.NewLine;
            }
            textBox4.Text = binary2;
        }

运行情况如下图;左边两个文本框是三个汉字和它的Base64编码;右边是它们对应的字节;

三个汉字是6字节;编码后变为8字节;下图编码后的字节的有的行看上去少了些bit,这是显示的原因,前面0省略了;

 也可以实现对图片的base64编码;

        private string base64string = "";

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            System.IO.MemoryStream m = new System.IO.MemoryStream();
            System.Drawing.Bitmap bp = new System.Drawing.Bitmap(@"y:\\gif1.gif");
            bp.Save(m, System.Drawing.Imaging.ImageFormat.Gif);
            byte[]b= m.GetBuffer();
            base64string=Convert.ToBase64String(b);

            textBox1.Text = base64string;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            byte[] bt = Convert.FromBase64String(base64string);
            System.IO.MemoryStream stream = new System.IO.MemoryStream(bt);
            Bitmap bitmap = new Bitmap(stream);
            pictureBox2.Image = bitmap;
        }

运行如下;点第一个按钮把图片编码为base64;点第二个按钮再从base64码获得原图像;

 

以上是关于Base64的编码规则和C#实现的主要内容,如果未能解决你的问题,请参考以下文章

c# Base64编码和图片的互相转换代码

c# Base64编码和图片的互相转换代码

用C#实现Base64处理,加密解密,编码解码

使用 C# 实现 URL 安全的 Base62 转码

如何在 C# 中实现 Base64 URL 安全编码?

将base64编码的Textmate片段过滤回文本