我经常听到人们谈论“64进制编码”。它的用途是什么?


当前回答

Base64可以用于许多目的。

主要原因是将二进制数据转换为可通过的数据。

我有时用它来将JSON数据从一个站点传递到另一个站点,存储信息 在cookie中关于用户的信息。

注意: 你“可以”用它来加密——我不明白为什么人们说你不能,而且它不是加密,尽管它很容易被破解,而且不受欢迎。加密只不过是将一串数据转换为另一串数据,以后可以解密,也可以不解密,这就是base64所做的。

其他回答

当我们通过web服务传输大型二进制对象(图像)时,我在实际意义上使用它。因此,当我使用python脚本测试c# web服务时,可以使用一点魔法重新创建二进制对象。

(在python中)

import base64
imageAsBytes = base64.b64decode( dataFromWS )

它用于将任意二进制数据转换为ASCII文本。

例如,电子邮件附件就是通过这种方式发送的。

这是一种二进制数据的文本编码,其结果文本除了字母、数字和符号“+”、“/”和“=”之外什么都没有。这是一种在专门用于文本数据的媒体上存储/传输二进制数据的方便方法。

但为什么是Base-64?将二进制数据转换为文本的两种替代方法是:

Decimal:将每个字节的十进制值存储为三个数字:045 112 101 037等,其中每个字节由3个字节表示。数据膨胀了三倍。 十六进制:将字节存储为十六进制对:AC 47 0D 1A等,其中每个字节由2个字节表示。数据膨胀了两倍。

Base-64在4个字符中映射3个字节(8 x 3 = 24位),该字符横跨6位(6 x 4 = 24位)。结果看起来像“TWFuIGlzIGRpc3Rpb…”。因此膨胀仅仅是原来的4/3 = 1.3333333倍。

大多数情况下,我看到它被用于在只能处理ascii或简单字符集的上下文中对二进制数据进行编码。

当您有一些想要通过网络传送的二进制数据时,通常不会仅仅以原始格式在网络上传输比特和字节。为什么?因为有些媒体是为文本流而设计的。您永远不会知道——有些协议可能会将二进制数据解释为控制字符(如调制解调器),或者您的二进制数据可能会被搞糟,因为底层协议可能认为您输入了一个特殊的字符组合(如FTP如何转换行结束符)。

为了解决这个问题,人们把二进制数据编码成字符。Base64就是这些编码类型中的一种。

为什么是64年? 因为你通常可以依赖于相同的64个字符出现在许多字符集中,你可以合理地相信你的数据最终会在线路的另一端没有损坏。