Base64编码解码原理详解

原创 2016年06月01日 00:51:58

Base64编码解码原理详解

1. Base64字符的组成部分

Base64所用字符: 0,1,2 ….9 A,B,C,D…Z a,b,c,d…z + /
对应ASCII: 48,49…58,65,66…90,97,98…122, 43,47

2. 10个数字,26个大写字母,26个小写字母,1个+,一个 / 刚好64个字符

3. Base64是将每3个字符转化为4个字符,即(3*8bit=4*6bit),如果文本结尾不足3个字符,对转化为6为字符后,后面剩余的二进制位可能是2位或者4位(因为是N%6),余数为0时代表整除了,在剩余二进制位后面补0至6个二进制位,再在结尾加=号,使编码后的字符满足(N*8+等号个数)/6=base64的字符个数,说白了,如果N*8%6后余2个二进制位,就补2个=,余4个二进制位就补一个=,整除不补=。

4. Base64编码对应的字符表

这里写图片描述

5. 对字符个数是3的倍数(N*8%6=0)的字符串进行Base64编码

原文:         p           h         p

对应ASCII: 01110000   01101000  01110000

每6位分割:  011100  000110  100001 110000  |

对应10进制值:  28      6       33     48

Base64对应的字符:c     G        h      w

最后php=cGhw(base64)

6. 对字符个数为N*8%6=2的字符串进行base64编码

原文:        r        a         n       l 

ASCII值:01110010 01100001 01101110 011011006位分割:011100  100110 000101 101110 | 011011  00 0000  xxxxxx  xxxxxx |

对应10进制值:28      38    5       46    27       0         =       =
对应base64字符: c    m     F       u     b       A          =       = 

结果: ranl=cmFubA==(base64)

7. 对字符个数为N*8%6=4的字符串进行base64编码

原文           h          a         c         k          e

ASCII值:    01101000  01100001  01100011  01101011   011001016位分割:  011010  000110  000101  100011 | 011010  110110  0101 00    xxxxxx |

对应10进制值: 26       6      5       35      26      54       20         =

对应base64字符: a      G      F        j       a       2        U         =

结果 hacke=aGFja2U=(base64)

8. Base64对于中文的不同编码可能会出现不同的结果,具体要看中文用的是什么编码。

9. 总结,看懂了base64的编码过程,当前解码的过程也就明白了,在这儿我就不多讲了,后面有时间再发布base64的编码和解码的源代码。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java如何进行Base64的编码(Encode)与解码(Decode)?

Java进行Base64的编码(Encode)与解码(Decode)的几种方式与区别..
  • zhou_kapenter
  • zhou_kapenter
  • 2017年03月17日 16:37
  • 23782

BASE64解码之中文乱码问题

BASE64解码之中文乱码问题
  • yangdiao127
  • yangdiao127
  • 2017年03月16日 13:00
  • 2516

C语言base64编码与解码

昨天工作中遇到需要将char *转换成base64的问题,把这块单独提取出来作为一个模块。 这里有几个参数需要解释一下: char *out:一块buffer的首地址,这块buffer就是用来存放...
  • superbfly
  • superbfly
  • 2016年11月15日 10:39
  • 3326

Base64系列第二篇 python中使用Base64编码解码

本篇《Base64系列第二篇 python中使用Base64编码解码》将介绍如何使用python来完成Base64的编码解码 在python中使用base64编码和解码都是非常方便的,在import ...
  • MoreWindows
  • MoreWindows
  • 2013年10月29日 10:33
  • 34731

base64解码详解

上一节详细的解释了编码的过程,本节将介绍一下解码的过程。可以说解码就是编码的你过程,具体的代码如下: int FindPos(const char needChar) {//base64的ascii表...
  • xbk123123
  • xbk123123
  • 2016年12月08日 09:58
  • 235

golang中自带base64编码和解码

golang中base64的编码和解码可以用内置库encoding/base64package mainimport ( "encoding/base64" "fmt" "lo...
  • pingD
  • pingD
  • 2017年01月19日 14:07
  • 10044

Base64编解码算法详解(附C/C++源码)

Base64不是什么新奇的算法了,不过如果你没从事过页面开发(或者说动态页面开发,尤其是邮箱服务),你都不怎么了解过,只是听起来很熟悉。 对于黑客来说,Base64与MD5算法有着同样的位置,因为电...
  • prsniper
  • prsniper
  • 2011年12月23日 10:49
  • 10490

java base64编码和解码的三种方式

方式一: 方式二: fangshi
  • hw1287789687
  • hw1287789687
  • 2014年04月26日 10:46
  • 11701

Base64编码理解

原文地址:http://www.ruanyifeng.com/blog/2008/06/base64.html 所谓Base64,就是说选出64个字符----小写字母a-z、大写字母A-Z、...
  • flycct
  • flycct
  • 2016年05月18日 17:51
  • 2589

base64原理解析

开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容,花几分钟时间...
  • wodeyuer125
  • wodeyuer125
  • 2015年04月20日 14:43
  • 7818
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Base64编码解码原理详解
举报原因:
原因补充:

(最多只允许输入30个字)