(二)base64编码的前世今生

1.  什么是BASE64编码

BASE64就是一种基于64个可打印字符来表示二进制数据的方法。换句话说,就是将二进制数编码成为64个可打印字符(符合ASCII编码规则)。

2.  为什么会出现BASE64 编码

最早的邮件系统只处理ASCII编码,ASCII码为7位有效码,一共包括。因此旧的邮件系统就会以为收到的8位字节码都是以ASCII编码的,并不理会最高位,或者简单粗暴的处理最高位,如:截断最高位。

后来,邮件的内容越来越丰富了,人们不仅想传输英文字符,还想传输如:中文(各种不同的编码),图片、视频(二进制文件)等更加丰富的内容。然而,这些内容的编码超出了ASCII码的范围,若不加以处理,这些编码在经过旧的邮件系统时,若最高位被截断了,信息就损失了,接收方没有办法判断发送过来的字符最高位是0还是1,也就无法正确还原发送方发出的数据。

怎么办呢?很简单,就是发送方把这些内容按照一定规则重新编码成符合ASCII码格式的编码,使其能够顺利通过那些问题邮件系统而不会有信息损失,接收方再按照对应的规则还原回来。

于是,当当当,BASE64应运而生,这样所有的二进制都可以转换成ASCII编码格式进行传输了。

3. BASE64编码规则

1. BASE64编码基于以下64个可打印字符:A-Z、a-z、0-9、+、/。64个字符只需要使用6个bit即可完全表示(2的6次方为64)。

2. 二进制字符串转换成BASE64的方法是:

(1)每3个8位字符分隔为4个6位字符。(因为Base64的编码只有6个bit即可表示,而正常的字符是使用8个bit表示, 8和6的最小公倍数是24,所以4个Base64字符可以表示3个8位字符)。

(2)在6位字符的最高2位补0,查表可得对应的可打印字符。

(3)当二进制字节数少于3个,即二进制bit数不是6的倍数时:二进制位数补零直到bit数为6的最小公倍数,再按6位分隔查表得到对应的BASE64可打印字符;最后,将编码结果用“=”补齐为4个字符。【why?为了与原码中本来有的0进行区别】

例:将a进行BASE64编码为YQ==



4.  BASE64的应用场景

什么情况下需要用到BASE64编码呢?那取决于BASE64都能做什么。经过BASE64编码后,数据变成了64个ASCII编码的数据,也就是说:

◉密码均是常用可见的字符

◉密码均由64个常用字符组成

◉无法一眼看出密码的内容

对应的,使用BASE64密码的动机可以归纳为:

◉将不可见字符转换为可见字符

◉对消息格式进行保护

◉对消息内容进行简单保护(防君子不防小人)

(1)将不可见字符转换为可见字符

网页中图片等二进制数据的BASE64编码

(参考:http://www.webhek.com/post/data-url.html

前端在实现页面时,对于一些简单的图片,为了避免浏览器加载外部资源,可以将图片内容直接嵌入到网页里。这就是浏览器的Data

URLs 的特性,它可以优化网站加载速度和执行效率。图片数据是二进制数据,没有办法描述。使用Base64对图片或其他文件的二进制数据进行编码后,这些数据就变成了可见字符。

(2)对消息格式进行保护

与邮件系统处理非ASCII编码会遇到的问题类似,其基本目的是保证发送方发出的内容经过网络传输后能够被正确的还原。这是处理包含特殊字符的消息最简单有效的实现方式,避免了发送方和接收方对消息中的字符进行逐个处理的复杂性。

URL与Cookie

URL通常以冒号和斜杠来对URL的内容进行分隔。URL中还会传递一些用户输入、二进制数据等参数。当这些内容中包含了冒号和斜杠等特殊字符时,若不加以处理,会影响WEB系统对URL格式的解析。因此,将参数内容进行BASE64编码以后再进行传输,就可以降低系统处理特殊字符的复杂性。同时发送者和接收者无须担心传输的内容会破坏HTTP分析程序的冒号、换行符或二进制值。

Cookie

(参考:https://www.cnblogs.com/andy-zhou/p/5360107.html#_caption_0

Cookie是服务器通过HTTP头发送给客户端的数据,为了在HTTP头部无损的传递这些消息内容,通常也需要对cookie的内容进行base64编码。通常在cookie中传递的二进制数据包括图片、证书等。

注:由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+和/分别变成-和_。

结构化文本

参考:https://blog.csdn.net/qq_27274997/article/details/78215934

一个xml当中包含另一个xml数据,此时如果将xml数据直接写入显然不合适,将xml进行适当编码存入较为方便,事实上xml当中的字符一般都是可见字符(0-127之间),但是由于中文的存在,可能存在不可见字符,直接将字符打印在外层xml的数据中显然不合理,那么怎么办呢?可以使用base64进行编码,然后存入xml,解码反之其实还有个办法,将byte的值写在xml当中,空格或者,分开,这样也可以将byte数据传入,不过这样更浪费空间,并且不易保存。


(3)对消息内容进行简单保护(防君子不防小人,防外行不防内行),就不解释了。

    (参考:https://blog.csdn.net/waf1314/article/details/5107400

 

5. BASE64的误用

BASE64不能用于信息加密!很容易破解!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容