base64加密,解密,encode,decode,编码详解+实现

-------------------------------------------欢迎查看字符编码【专栏】------------------------------------------------------------------
汉字编码之GBK编码【点击】                                              判断汉字正则表达式更严谨方法【点击
记事本输入“联通”俩字,关闭再打开乱码 【点击】              iPhone emoji问题牵出的Unicode代理区的思考【点击
Unicdoe【真正的完整码表】对照表【点击】                      开源工程ZipArchive,压缩中文文件名乱码问题【点击
base64加密,解密,encode,decode,编码详解+实现【点击】 
网络传输文本,urlEncode和urldecode的iOS实现【点击】 字符编码的奥秘utf-8, Unicode【点击
--------------------------------------------------------------------------------------------------------------------------------------------------

概述

        Base64是一种基于64(A-Z、a-z、数字0-9 ,‘+’,‘/’)个可打印字符,来表示二进制数据的表示方法,基本思想是把所有字符都转化到这64个打印字符,方便流通。

        由于2的6次方等于64,所以每6个位元为一个单元,对应某个可打印字符。三个字节有24个位元,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后binhex的版本使用不同的64字符集来代表6个二进制数字,但是它们不叫Base64。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME, 在XML中存储复杂数据.

      base64转换逻辑

        转换的时候(如下图1),将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6(因为2^6=64)个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。这么看来,跟URLEncode也很有相似之处啊

  • 编码“Man”
文本Man
ASCII编码7797110
二进制位010011010110000101101110
索引1922546
Base64编码TWFu

(图1)

        如下图2所示,如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

文本(1 Byte)A  
二进制位01000001                
二进制位(补0)010000010000            
Base64编码QQ  
文本(2 Byte)BC 
二进制位0100001001000011  xxxxxx
二进制位(补0)010000100100001100xxxxxx
Base64编码QkM 
(图2)

这么说base64都是4的倍数。

Base64索引表:

参考表
ValueChar ValueChar ValueChar ValueChar
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

ios上自己实现了一下,温习一下这个过程;http://download.csdn.net/detail/hherima/5179817


由于不知道怎么删除csdn上的资源,我又上传了一份资源,里面包含了uft-8的转码,unicode的转码,gbk转码


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值