Base64编码

用途

我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

严格来说base64不能算是一种加密,只能说是编码转换。设计使用base64的初衷,是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴。

字母表

Base64字母表(Alphabet),字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符

img

编码过程

Base64共有64个字符,用6个bit位就可以全部表示,26=64.

那么怎么用6个有效bit来表示传统字符的8个bit呢

8和6的最小公倍数是24,也就是说3个传统字节可以由4个Base64字符来表示,唯一的不足就是:编码后的数据比未编码的数据多出1/3。

img

"Man"对应的Base64字符是"TWFU"。

如果字符串的长度不是3的倍数时,要怎么办呢

img

"A"对应的Base64字符是"QQ=="。

"BC"对应的Base64字符是"QkM="。

C# 实现

public static string EncryptByBase64(string input)
{
    byte[] bytes = Encoding.UTF8.GetBytes(input);

    return Convert.ToBase64String(bytes);
}

public static string DecryptByBase64(string input)
{
    byte[] bytes = Convert.FromBase64String(input);

    return Encoding.UTF8.GetString(bytes);
}

参考

MIME协议和Base64编码--rfc1341

posted @ 2022-08-27 15:32  renzhsh  阅读(133)  评论(0编辑  收藏  举报