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


当前回答

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

(在python中)

import base64
imageAsBytes = base64.b64decode( dataFromWS )

其他回答

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

(在python中)

import base64
imageAsBytes = base64.b64decode( dataFromWS )

Base64是一个二进制到文本的编码方案,以ASCII字符串格式表示二进制数据。它被设计用来在网络通道中传输二进制格式的数据。

Base64机制使用64个字符进行编码。这些字符包括:

10个数值:即0,1,2,3,…,9 大写字母:即A,B,C,D,…,Z 小写字母:即a,b,c,d,…,z 2个特殊字符(这些字符取决于操作系统):即+,/

base64如何工作

使用base64算法编码字符串的步骤如下:

计算字符串中的字符数。如果它不是3的倍数,那么用特殊字符(即=)填充它,使它是3的倍数。 使用ASCII表将字符串转换为ASCII二进制格式8位。 转换为二进制格式后,将二进制数据分成6位的块。 将6位二进制数据块转换为十进制数。 根据base64索引表将小数转换为字符串。这个表可以是一个例子,但正如我所说,2个特殊字符可能会有所不同。

现在,我们得到了输入字符串的编码版本。

让我们举个例子:将字符串THS转换为base64编码字符串。

计算字符数:它已经是3的倍数。 转换为ASCII二进制格式8位。我们得到(T)01010100 (H)01001000 (S)01010011 将二进制数据分成6位的块。我们收到010101 000100 100001 010011 将6位二进制数据块转换为十进制数。得到21 4 33 19 根据base64索引表将小数转换为字符串。我们有VEhT

当需要对二进制数据进行编码时,通常使用Base64编码方案,这些数据需要通过设计用于处理文本数据的媒体存储和传输。这是为了确保数据在传输过程中保持完整而不被修改”(Wiki, 2017)

示例可能如下:您有一个只接受ASCII字符的web服务。你想要保存用户的数据,然后将其传输到其他位置(API),但接收者想要接收未触及的数据。Base64是用来…唯一的缺点是base64编码需要比常规字符串多33%的空间。

另一个示例::uenc = url encoded = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html。

正如你所看到的,如果我们想把最后一次访问的URL作为参数发送,我们就不能把字符“/”放在URL中,因为我们会打破“MOD重写”- GET参数的属性/值规则。

一个完整的例子是:" http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product/93/ "

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

但为什么是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倍。

有些传输协议只允许传输字母数字字符。想象一下这样一种情况:控制字符用于触发特殊操作,或者每个字符只支持有限的位宽。Base64将任何输入转换为只使用字母数字字符、+、/和=作为填充字符的编码。