C# 处理base64 以及base64的原理分析

摘要:
如果ASCII字符小于3,即小于24位。从左到右,至少需要解析4个字符。可以解析的字符可以直接解析,而不能解析的字符则可以直接用=表示。N*8/6例如,单个字符a转换为Base64。与字符a对应的ASCII为十进制65和二进制01000001。除以6位得到01000001。只能解析两个字符010000010000。缺少两个base64字符,它们可以直接解析为=。字节数组长度为41,41/3=13…213*4+4=56;另外2个ASCII字符,可以解析3个base64字符,并且必须添加1=。8*2/6向上取整,因此解析三个base64字符
u

 

随笔 - 2009  文章 - 1  评论 - 74
C# 处理base64 以及base64的原理分析
 

base64的原理,

http://www.cnblogs.com/diligenceday/p/6002382.html

http://www.cnblogs.com/chengxiaohui/articles/3951129.html

base64的码表只有64个字符, 如果要表达64个字符的话,使用6的bit即可完全表示(2的6次方为64)。

因为Base64的编码只有6个bit即可表示,而正常的字符是使用8个bit表示, 8和6的最小公倍数是24,所以4个Base64字符可以表示3个标准的ascll字符;

复制代码
  public void Base64Test()
        {
            string abc = "abc";
            var array = Encoding.ASCII.GetBytes(abc);
            string result = Convert.ToBase64String(array);
            Console.WriteLine(result);
        }
复制代码

因为3个ASCII字符,才能和4个base64字符对应。如果ASCII字符不足3个,即不足24bit。

从左往右,需要解析出至少4个字符,能解析的字符直接解析,无法解析的,直接用=表示。

n*8/6

比如单个字符A,转换为Base64。

单个字符A,1个字节,8bit。

字符A的对应的ASCII是十进制是65, 二进制是01000001。

按照6bit进行拆分,得到010000 01,只能解析出2个字符010000 010000,还缺少2个base64的字符,直接解析为=。

扩展:

根据字节数组的长度,来计算加密后的字符长度,以及=的个数。


字节数组长度为39,13*4=52;

字节数组长度为40,40/3=13...1    13*4+4=56; 多出1个ASCII字符,可以解析2个base64字符,还要补上2个=。   8*1/6向上取整,所以解析2个base64字符。

字节数组长度为41,41/3=13...2     13*4+4=56;多出2个ASCII字符,可以解析3个base64字符,还要补上1个=。   8*2/6向上取整,所以解析出3个base64字符

免责声明:文章转载自《C# 处理base64 以及base64的原理分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇视频直播分析JavaScript单元测试工具-Jest下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL 通配符学习小结

MySQL 通配符 SQL的模式匹配同意你使用“_”匹配不论什么单个字符,而“%”匹配随意数目字符(包含零个字符)。在 MySQL中,SQL的模式缺省是忽略大写和小写的。以下显示一些样例。 注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比較操作符。 为了找出以“b”开头的名字: mysql>...

Vim的移动大法

Vim的移动大法 移动光标的按键 “h” 向左移动 “j”向下移动 “k”向上移动 “l”向右移动 在单词之间移动 注:word指的是以非空白字符分割的单词,WORD是以空白字符分割的单词。 w/W 移动到下一个word/WORD开头 e/E 移动到下一个word/WORD结尾 b/B 回到上一个word/WORD开头 在行间搜素移动 f光标之后 输入要搜...

C# 截取字符串

string str = "Grade_02/软件"; //截取指定字符串 (实际项目中,字符串的长度需要计算,截取的开始位置和指定 //长度也需要按实际情况去计算) int i = 2; int Length = 5; str = st...

每天一个linux命令(24):Linux文件类型与扩展名

Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。 一. 文件类型 Linux文件类型常见的有:普通文件、目录文件、字符设备文件和块设备文件、符号链接文件...

用GO语言开发editplus编辑器插件(附源码)

我要开发的插件功能极为简单,就是对用户选中的内容进行base64编码或解密工作. 其中所涉及的技术部分主要是GO语言程序开发和editplus插件配置的部分,首先我们来看一下GO语言代码的写法,如下: package mainimport ("encoding/base64""fmt""os")const (version string = "1.0")f...

CCF-201512-3-画图

问题描述 试题编号: 201512-3 试题名称: 画图 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术。例如,下图是用 ASCII 字符画出来的 CSPRO 字样。   ..____.___...