1、什么是Base64
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。首先将字符串转化为对应的ASCII码,然后转化为二进制,字节占8位,Base64编码将3个8位字节转化为4个6位单元,然后在这6位前加两个0,一共8位存储,如果源字符所占的字节不到3个字节,则剩余的字节由0填充,如果转化后的单元全为0,则用=表示。64个字符包括:字母A-Z、a-z、数字0-9,+ , /
Value Char | Value Char | Value Char | |||||
0 | A | 16 | Q | 32 | g | 48 | w |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | i | 50 | y |
3 | D | 19 | T | 35 | j | 51 | z |
4 | E | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | l | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | I | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | p | 57 | 5 |
10 | K | 26 | a | 42 | q | 58 | 6 |
11 | L | 27 | b | 43 | r | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | t | 61 | 9 |
14 | O | 30 | e | 46 | u | 62 | + |
15 | P | 31 | f | 47 | v | 63 | / |
例子:如果源字符所占不足3个字节, 则补0, 最终将3个字节对应的24个位, 分隔成4个单元(每个单元对应原来的6位,然后前再补2个0存储) , 如果转化的Base64为2个数据, 则加两个=, 共4个字符, 如果转化的Base64为3个数据, 则加1个=, 如果转化的Base64为4个数据, 则不城加=
A | |||||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | ||||||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | ||||||||||||
Q | Q | = | = | ||||||||||||||||||||
B | C | ||||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | ||
0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Q | k | M |
用更接近于编程的思维来说,编码的过程是这样的:
第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。
然后将第一个字符左移6位加上第二个字符右移4位,即获得第二个目标字符。
再将第二个字符左移4位加上第三个字符右移6位,获得第三个目标字符。
最后取第三个字符的右6位即获得第四个目标字符.
原文的字节数量应该是3的倍数啊,如果这个条件不能满足的话,那该怎么办呢?
我们的解决办法是这样的:原文的字节不够的地方可以用全0来补足,转换时Base64编码用=号来代替。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。因为:
余数 = 原文字节数 MOD 3
所以余数任何情况下都只可能是0,1,2这三个数中的一个。如果余数是0的话,就表示原文字节数正好是3的倍数(最理想的情况啦)。如果是1的话,为了让Base64编码是4的倍数,就要补2个等号;同理,如果是2的话,就要补1个等号。
参考:
http://zh.wikipedia.org/wiki/Base64
http://base64.xpcha.com/
http://jimb.iteye.com/blog/269302
2、什么是Base32
以5个二进制位为一个单元,将5个字节, 转化为对应8个Base32字符, 例子参见:
http://blog.csdn.net/mittermeyer/article/details/96950
http://blog.csdn.net/instruder/article/details/5963344
用途:
Base64 主要不是加密,它主要的用途是把一些二进制数转成普通字符用于网络传输。
由于一些二进制字符在传输协议中属于控制字符,不能直接传送需要转换一下就可以了。
由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。它使用下面表中所使用的字符与编码。
而且base64特别适合在http,mime协议下快速传输数据。
base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。
相关推荐
易语言汇编base64编码源码,汇编base64编码,Base64Encode,Base64Decode
labview 图片缩放 base64编码base64解码
需要一个二进制与BASE64相互转换的函数,从网上找...示例中提供二进制与16进制字符串转换函数ConvertHexStrToBin与ConvertBinToHexStr,二进制与BASE64编码转换函数Base64Encode与Base64Decode,在VC6下编译通过可用。
Base64编码与图片互转
Hex十六进制/Base64编码转换器,可对字符串文本进行十六进制及Base64编码与反编码
pb10调用base64.dll,实现将图片转换成base64编码,将base64编码转换成图片 函数声明 function long GetFileEncode64(ref string filename, ref string encode64)library "base64" alias for "GetFileEncode64;...
可以实现将文件转换为Base64编码。可以实现将文件转换为Base64编码。
base64 Base64编码 .NET C#base64 Base64编码 .NET C#base64 Base64编码 .NET C#base64 Base64编码 .NET C#
完美支持中文 base64 编码与解码 目前速度最快 效率最高的编码与解码
1.Java生成二维码示例 2.图片保存到本地或生成Base64编码 3.Base64编码生成图片
教你用windows系统自带功能编码/解码 十六进制/Base64 -- 解码十六进制编码的文件 -- 解码 Base64 编码的文件 -- 将文件编码为 Base64 doc cmd 下 解码 Base64
c++ base64 编码
Base64编码解码工具.exe
开源-base64、base32、base16 的编码与解码 纯C源码可以再任何环境下编译
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论...
base 64编码可以将任意一组字节转换为较长的常见文本字符序列,从而可以合法地作为首部字段值。base 64编码将用户输入或二进制数据,打包成一种安全格式,将其作为HTTP首部字段的值发送出去,而无须担心其中包含会...
算法是查表方式实现,优点:性能好、缺点:码表有几KB的内存占用。跟精易模块的BASE64进行简单测试对比,没啥毛病... 1) 添加 BASE64解码2_ASM 支持未补码的BASE64编码(删除了对标准BASE64编码长度的检测,可能存在B
C实现邮件中常用的BASE64加密验证.输入的邮箱地址和密码都用的是BASE64机密后才给SMTP验证的
提供一种Base64编码,并输出UTF-8格式的BASE64编码方式。本程序在微信小程序开发工具中已经测试通过。 Base64代码: [javascript] view plain copy print? (function(){ var BASE64_MAPPING = [ 'A','B','C','D',...
pb10调用base64.dll,实现将图片转换成base64编码,将base64编码转换成图片 函数声明 function long GetFileEncode64(ref string filename, ref string encode64)library "base64" alias for "GetFileEncode64;...