关于base64:base64编码用于什么?

What is base 64 encoding used for?

我听过人们到处谈论"base 64编码"。它是用来干什么的?


当您有一些想要在网络上传送的二进制数据时,您通常不会通过将比特和字节以原始格式在线路上进行流式传输来实现这一点。为什么?因为有些媒体是为流文本制作的。你永远不知道——有些协议可能会把你的二进制数据解释成控制字符(比如调制解调器),或者你的二进制数据可能会出错,因为底层协议可能会认为你输入了一个特殊的字符组合(比如ftp如何翻译行尾)。

为了解决这个问题,人们把二进制数据编码成字符。base64是这类编码之一。

为什么是64?因为您通常可以依赖在许多字符集中存在的相同64个字符,并且您可以合理地确信您的数据将以未损坏的方式结束在导线的另一侧。


它基本上是一种用ASCII文本编码任意二进制数据的方法。每3字节的数据需要4个字符,最后可能还要加上一些填充。

实际上,输入的每6位都被编码成64个字符的字母表。"标准"字母表使用a-z、a-z、0-9和+和/,其中=作为填充字符。有URL安全的变体。

维基百科是一个相当好的信息来源。


Base-64编码是一种获取二进制数据并将其转换为文本的方法,这样可以更容易地通过电子邮件和HTML表单数据进行传输。

http://en.wikipedia.org/wiki/base64


它是二进制数据的文本编码,结果文本只有字母、数字和符号"+"、"/"和"="。这是一种通过专门用于文本数据的媒体存储/传输二进制数据的方便方法。

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

  • 十进制:将每个字节的十进制值存储为三个数字: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倍。


    already been from)怎么说,两uses that have not been很普通listed areP></

    hashes:P></

    hashes是单向函数,变换到另一块一块的字节的字节size of such as of a固定的128位或256(沙/ MD5)。字节转换为Base64 makes the导致恩多easier to the哈希当你是显示在especially?比较校验和换诚信。我经常看到hashes are that many people base64 Base64 as a hash本身的错误。P></

    cryptography:P></

    does not have since an encryption key to be text is but necessary to RAW字节/商店/有时在文件或数据库中,方便for which Base64来。with the same导致encrypted字节。P></

    that is often used Base64笔记,尽管在cryptography is not a安全机制。Base64字符串可以转换任何the back to its original字节should not be used,知道它在保护数据均值as for only to,or as a显示RAW格式的字节easily黑莓商店。P></

    证书P></

    X509证书PEM格式是在基地64编码。http:/ / / / _ how2ssl.com学术工作与档案_ PEM / _P></


    来自http://en.wikipedia.org/wiki/base64

    The term Base64 refers to a specific MIME content transfer encoding.
    It is also used as a generic term for any similar encoding scheme that
    encodes binary data by treating it numerically and translating it into
    a base 64 representation. The particular choice of base is due to the
    history of character set encoding: one can choose a set of 64
    characters that is both part of the subset common to most encodings,
    and also printable. This combination leaves the data unlikely to be
    modified in transit through systems, such as email, which were
    traditionally not 8-bit clean.

    Base64 can be used in a variety of contexts:

    • Evolution and Thunderbird use Base64 to obfuscate e-mail passwords[1]
    • Base64 can be used to transmit and store text that might otherwise cause delimiter collision
    • Base64 is often used as a quick but insecure shortcut to obscure secrets without incurring the overhead of cryptographic key management

    • Spammers use Base64 to evade basic anti-spamming tools, which often do not decode Base64 and therefore cannot detect keywords in encoded
      messages.

    • Base64 is used to encode character strings in LDIF files
    • Base64 is sometimes used to embed binary data in an XML file, using a syntax similar to ...... e.g.
      Firefox's bookmarks.html.
    • Base64 is also used when communicating with government Fiscal Signature printing devices (usually, over serial or parallel ports) to
      minimize the delay when transferring receipt characters for signing.
    • Base64 is used to encode binary files such as images within scripts, to avoid depending on external files.
    • Can be used to embed raw image data into a CSS property such as background-image.


    在早期的天工电脑电话线,当系统间通信快速可靠的particularly was not,method of &;肮脏的verifying was used"诚信日位:宇称"。本方法中,每个字节的比特transmitted会7日和8日的摇篮,1或0,1队The total number of to the to be是位在字节。P></

    因此,0x01摇篮摇篮transmited as 0x81;0x82 0x02;0x03仍会0x03等。P></

    对本系统的进一步,when the character set是唯一定义的ASCII码是00,7F characters指定。(今天我在the characters,80集的范围- FF是非标准的)P></

    routers put the many of the Day的宇称和字节检查电脑硬件forcing into the translation,to them to新政严格附与7位数据。电子邮件的附件(本队在与其他日期,which is为什么HTTP SMTP &;基于文本protocols are to be convert into),只在文本格式。P></

    一些survived into the of the routers 90 of them any,严重怀疑是在今天使用的。P></


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


    这里我要描述的base64的用法有点像黑客。所以如果你不喜欢黑客,请不要继续。

    当我发现mysql的utf8不支持4字节的unicode字符时,我遇到了麻烦,因为它使用了3字节的utf8版本。那么,我做了什么来支持MySQL的UTF8上的完整4字节Unicode呢?好吧,base64在存储到数据库中时对字符串进行编码,而base64在检索时进行解码。

    由于base64的编码和解码速度非常快,所以上述方法非常有效。

    您需要注意以下几点:

    • base64编码使用33%以上的存储

    • 存储在数据库中的字符串是不可读的(您可以将其作为数据库字符串使用基本加密形式的一项功能来销售)。

    对于不支持Unicode的任何存储引擎,都可以使用上述方法。


    在实践中使用它的传输二进制大对象时,我们的意识(Images)的Web服务。我知道当我在Web服务测试C #使用Python脚本对象,recreated can be with the binary的小魔术。P></

    Python中的[ ]P></

    1
    2
    import base64
    imageAsBytes = base64.b64decode( dataFromWS )


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

    例如,电子邮件附件以这种方式发送。


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

    例如:您的Web服务只接受ASCII字符。您希望保存用户数据,然后将其传输到其他位置(API),但收件人希望接收未经处理的数据。base64就是为了这个。…唯一的缺点是base64编码比常规字符串需要大约33%的空间。

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

    如您所见,如果我们想将上次访问的URL作为参数发送,则不能在URL中放置char"/",因为我们将打破"mod rewrite"–get参数的属性/值规则。

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


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


    对brad所说的进行一点扩展:许多电子邮件和usenet的传输机制以及其他移动数据的方式都不是"8位干净",这意味着标准ASCII字符集之外的字符在传输过程中可能会被损坏-例如,0x0D可能被视为回车,并转变为回车和换行。Base 64将所有二进制字符映射到几个标准的ASCII字母、数字和标点符号中,这样它们就不会被破坏。


    base64P></

    Base64是GENERIC term for a number of similar encoding编码二进制数据的处理方案,翻译模式和EN EN为基础numerically 64表示。the term from a originates MIME Base64内容传送编码的特异性。P></

    Base64编码方案commonly are used when there is a need to be that needs编码二进制数据和存储介质的转移,是设计过的textual新政与日期。This is to that the确保数据保持在运输intact没有变质。Base64 commonly is used a number of applications MIME邮件路径,包括复合,和储存在XML数据。P></


    Base64 can be used for many用途。P></

    the primary reason is to convert to something passable二进制数据。P></

    有时它的使用在一个网站从JSON数据通to another,商店信息关于用户cookie中。P></

    注释:你可以使用它,"encryption"-我不说你为什么不看人,那是不好的,尽管它会easily加密,breakable and is frowned河畔。没有什么比一个黑莓加密均值转换日期字符串string to another of that can be of日期或者一decrypted or not,and那是Base64 does。P></