与此相关的是,这是我为您创建的用于任意基本转换的基本转换器。请享用!
https://convert.zamicol.com/
什么是填充字符?
填充字符有助于满足长度要求,并且没有任何意义。
填充的十进制示例:
给定任意要求,所有字符串的长度均为8个字符,数字640可以使用前面的0作为填充字符来满足此要求,因为它们不带任何含义“ 00000640”。
二进制编码
字节范例:字节是事实上的标准度量单位,任何编码方案都必须与字节相关。
Base256完全适合此范例。1个字节等于base256中的一个字符。
Base16(十六进制或十六进制)对每个字符使用4位。一个字节可以表示两个base16字符。
与base256和base16不同,Base64不能均匀地适合字节范式(base32也不能)。所有base64字符都可以用6位表示,比完整字节少2位。
我们可以将base64编码相对于字节范式表示为分数:每个字符6位超过每个字节8位。减少的这一部分是3个字节超过4个字符。
此比率(每4个base64字符3个字节)是编码base64时要遵循的规则。 Base64编码甚至只能保证使用3个字节的包进行测量,这 与base16和base256不同,每个字节都可以独立存在。
那么为什么即使在没有填充字符的情况下编码也可以正常工作,为什么还是鼓励填充呢?
如果流的长度未知,或者准确了解数据流何时结束会有所帮助,请使用填充。填充字符明确表示这些多余的点应为空,并排除任何歧义。即使填充的长度未知,您也将知道数据流的结束位置。
作为反例,某些标准(例如JOSE)不允许填充字符。在这种情况下,如果缺少某些内容,则加密签名将不起作用,否则将丢失其他非base64字符(例如“。”)。尽管没有关于长度的假设,但是也不需要填充,因为如果出现错误,它将根本无法工作。
这正是base64 RFC所说的,
在某些情况下,不需要或不使用在基本编码数据中使用填充(“ =”)。在一般情况下,当无法做出有关传输数据大小的假设时,需要填充以产生正确的解码数据。
[...]
daccess-ods.un.org daccess-ods.un.org如果未正确实现base 64中的填充步骤,则会导致编码数据的非重大更改。例如,如果对于基数64编码,输入仅为一个八位位组,则使用第一个符号的所有六位,但是仅使用下一个符号的前两位。这些填充位必须由合格的编码器设置为零,这将在下面的填充说明中进行描述。如果不保留此属性,则不会对基本编码的数据进行规范表示,并且可以将多个基本编码的字符串解码为相同的二进制数据。如果此属性(以及本文档中讨论的其他属性)成立,则可以保证规范编码。
填充允许我们解码base64编码,并且不会丢失任何比特。如果不进行填充,则不再明确承认要在三个字节的束中进行测量。如果没有填充,通常可能无法从堆栈中的其他位置(例如TCP,校验和或其他方法)获得没有附加信息的原始编码的精确再现。
例子
这是RFC 4648的示例格式(http://tools.ietf.org/html/rfc4648#section-8)
“ BASE64”函数中的每个字符都使用一个字节(base256)。然后,我们将其转换为base64。
BASE64("") = "" (No bytes used. 0%3=0.)
BASE64("f") = "Zg==" (One byte used. 1%3=1.)
BASE64("fo") = "Zm8=" (Two bytes. 2%3=2.)
BASE64("foo") = "Zm9v" (Three bytes. 3%3=0.)
BASE64("foob") = "Zm9vYg==" (Four bytes. 4%3=1.)
BASE64("fooba") = "Zm9vYmE=" (Five bytes. 5%3=2.)
BASE64("foobar") = "Zm9vYmFy" (Six bytes. 6%3=0.)
您可以使用以下编码器:http : //www.motobit.com/util/base64-decoder-encoder.asp