首页 > 代码库 > Base64 编码原理
Base64 编码原理
1.编码表
2.原理[汉字不能base64编码]
base64 编码就是将字符以3个为一组,因为一个字符由8个位组成,3*8=24位,然后以顺序以6个位拿出,前面补2位,凑成8位--一个字节
原字节不能被3整除的,在后面补 由8个0,构成的单字节,一般补1个或是2个(0000 0000),这些后面补的字节不能用base64编码对应,应该是异常字符,用“=”号替换,
所以,base64编码一般最后会有1~2个“=”号
示例:
base64编码前:Lucy
L u c y
ASCII: 76 117 99 121
8bit字节: 01001100 01110101 01100011 01111001 00000000 00000000
6bit字节: 010011 000111 010101 100011 011110 010000 000000 000000
十进制: 19 7 21 35 30 16 (异常) (异常)
对应编码: T H V j e Q = =
base64编码后的结果:THVjeQ==
3.转换过程
1 1.//得到ascii码 2 ascii = Convert.ToInt32(str).ToString(); 3 2.//得到二进制数据 4 binary = Convert.ToString(Convert.ToByte(ascii),2).PadLeft(8,‘0‘); 5 3.//截取6字节 前面补0 6 bit6 = binary.Substring(0, 6); 7 8 4.//转换为十进制 9 10 position = Convert.ToInt32(bit6,2);11 12 5.//获取对应的base64码13 14 c = base64hash.ToArray()[position];
4.控制台实现
1 static void Main(string[] args) 2 { 3 string base64hash = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 4 string input = Console.ReadLine(); 5 string ascii = ""; 6 string binary = ""; 7 int i = 0; 8 string previous=""; 9 int mod=0;10 string bit6="";11 int position;12 char c;13 StringBuilder sb = new StringBuilder();14 15 while (i<input.ToArray().Length)16 {17 char str = input[i];18 //得到ascii码19 ascii = Convert.ToInt32(str).ToString();20 //得到二进制21 binary = Convert.ToString(Convert.ToByte(ascii),2).PadLeft(8,‘0‘);22 23 //以3个字符为一组24 mod = i % 3;25 switch (mod)26 {27 //组中的第一个字符28 case 0:29 //截取6字节 前面补030 bit6 = binary.Substring(0, 6);31 //转换为十进制32 position = Convert.ToInt32(bit6,2);33 //获取对应的base64码34 c = base64hash.ToArray()[position];35 sb.Append(c);36 break;37 //组中的第二个字符38 case 1:39 //取前一个字符的后2位+ 当前字符的前4位(二进制格式)40 bit6 = (previous.Substring(6, 2) + binary.Substring(0,4));41 //转换为十进制42 position = Convert.ToInt32(bit6, 2);43 //获取对应的base64码44 c = base64hash.ToArray()[position];45 sb.Append(c);46 break;47 //组中的第三个字符48 case 2:49 //取前一个字符的后4位+ 当前字符的前2位(二进制格式)50 bit6 = (previous.Substring(4, 4) + binary.Substring(0, 2));51 //转换为十进制52 position = Convert.ToInt32(bit6, 2);53 //获取对应的base64码54 c = base64hash.ToArray()[position];55 sb.Append(c);56 57 //剩余六位58 bit6 = (binary.Substring(2, 6));59 //转换为十进制60 position = Convert.ToInt32(bit6, 2);61 //获取对应的base64码62 c = base64hash.ToArray()[position];63 sb.Append(c);64 break;65 }66 previous = binary;67 i++;68 }69 70 if (mod == 0)//需要补两个字符(0000 0000 0000 0000)71 {72 //将剩下的后2位+补的前4位73 bit6 = (previous.Substring(6, 2) + "0000");74 //转换为十进制75 position = Convert.ToInt32(bit6, 2);76 //获取对应的base64码77 c = base64hash.ToArray()[position];78 sb.Append(c);79 //添加两个==(异常)80 sb.Append("==");81 }82 else if (mod == 1)//需要补一个字符(0000 0000)83 {84 //将剩下的后4位+补的前2位85 bit6 = (previous.Substring(4, 4) + "00");86 //转换为十进制87 position = Convert.ToInt32(bit6, 2);88 //获取对应的base64码89 c = base64hash.ToArray()[position];90 sb.Append(c);91 //添加一个=(异常)92 sb.Append("=");93 }94 Console.WriteLine(sb.ToString());95 96 Console.ReadKey();97 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。