【原】关于Base64
in 随笔 with 0 comment

【原】关于Base64

in 随笔 with 0 comment

科学是到处为家的,不过,在任何不播种的地方,是决不会得到丰收的。 --赫尔岑

几天前,我们在讨论文件存储的时候,聊着聊着就谈到了base64,我期初一直认为base64是一种加密算法,其实不是的,那base64究竟是怎么工作的呢?

首先先看一段base64的编码:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAYAAADo6zjiAAAAAXNSR0IArs4c6QAAAwBJREFUWAntl8tLVHEUx39zZ8YkwkWLpMc/4EQGbSoI5iaR0CKcXUSLhMAg2whOgaaDSAuFqEWPTYuEYhiCYCIjCBMXErWqwKFWITUmVCuJoRmcPmfwXK6Ttzsvm40/OJzX9zx+r/sImCaNRCJxgdJ9VpPqS9kI1NnMBkpzb3oDIWmD/dgFuwIdgj5blnVnZGTkLfK6AW57IBAYLBaLx3B8R54aHR19vg6EkkqlgplMph/cSdTf0BNip8pxols49sHfAx6AbOj86urqPPYed4AUR3+DLwHmBHQGeRr7gBuHPbCwsPAM303kU1AP9ADcXTdOZdmCCQDtahCOLitzj6DSCq354tj3r8ludh3cHjWMjY2dBdetunJsF/EdVV25NHBcFTcnQJqSk6rDC7eNrXASE7chTpLgszWZcmmgqEo55yx4+sqxLr2qGGnglSvYEZnVN/Yxowb0GZXdHHsuFArNq80LJ35W4K9aFsFxKaYJhKPnYX3sbUHtBE9i/6C6cmxXh4aGllTn9iSxTauuHNtt8r1WXbk1PDz8FeUAACnwErqPfgRwWkHC0X+1tbUdxn8NegE9hLq5hrfcOGzFSCRyGn4Zego9ZivPEd/vxqkcUOF/cxq6Qc1LcgaaOtz33LOR8fHxvYVCYQKAzVlw7rxnwD8cbEkW9yy0IjDfLWCp5En5jsI7JaCBY4Wz8bGSLZjchOIyjx3k/VRJA9EGzro8le3bAF3uLo9qlC65KzqElRTs6OgwXV1d8hArwdPptFlcXPQNbUgDtm2baDTqFJeq4XDYt7gA6mqgpaXFxGIxI7OvddTcQGtrq+nt7TXt7es+Jaruw/cQemXM5XJmeXm55M7n82ZmZsOXpVe4Y695BSSDHDTZhrm5ORMMBp2k1Qg1r4AU4fFsksmkyWazhqdaNXUdbG1RTnj9wlYDWyvQ9BWo5IMku1lvRF5cS5WswGz9l80zw6xvA/w3DNLpD88UNTrI+ZPQuG8D8t9AEwcJeATJB2VdQ3JILnJ28r355Q8NEwuP/2ZoBQAAAABJRU5ErkJggg==

这一段代码表示的是一张图片,说道这里你可能会感觉很奇怪,这一段字符串怎么就成为图片了呢?在说明原理之前,得明确一件事情,那就是计算机中所有的数据都是以二进制的形式保存的。所以图片其实也是一堆二进制码,我们只有用图片查看软件才可以将这一堆二进制码以图片的方式解析,并呈现在屏幕上,这样存在一个问题就是,传播起来不方便。

所以人们就想了个办法将图片变成字符串,这样传播起来就方便多了,而二进制变成字符串的途径也很简单,因为我们有ASCII码表。所以base64就产生了,如下图,对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit,如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

请输入图片描述

base64的优点就是便于传播,我们可以以电子邮件的形式发送也可以用别的任何形式传播,与此同时我们也不难看出,我们将三个字节的数据量,变成了四个字节,这无疑是变大了文件尺寸,所以各有各的优势吧。

最后说两句,技术还是那个技术,是时间换空间还是空间换时间,这些都是我们在做开发的时候需要考虑的问题,因为一旦数据量足够大的时候,这些细节将决定成败!

Comments are closed.