zoukankan      html  css  js  c++  java
  • base64编解码即使用

    base64 编解码及使用

    前言

    大部分寻找 base64,只是为了使用而已,所以先说如何使用。
    不用寻找相关的 base64 库,不用自己处理编解码,直接调用浏览器自身 API。既然减少完全不必要加载的 js 文件。

    应用

    1. Base64 解码

      window.atob

    例如:

    window.atob('aGVsbG8gd29yZA==')
    "hello word"
    
    1. Base64 编码

      window.btoa

    例如:

    window.btoa('hello word')
    "aGVsbG8gd29yZA=="
    

    就是这么简单!

    兼容性: IE10+ 以后所有现代浏览器都支持,所以放弃 IE 吧!同时,不支持Unicode字符的编码, 需配合encodeURIComponent、decodeURIComponent来使用。


    这是一条迷人的分割线


    base64 是什么?

    引用百度百科的话:

    Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法。可查看 RFC2045 ~ RFC2049,上面有 MIME 的详细规范。
    Base64 编码是从二进制到字符的过程,可用于在 HTTP 环境下传递较长的标识信息。采用 Base64 编码具有不可读性,需要解码后才能阅读。

    有点拗口,即 base 是一种编码方式,不是加密,不是加密,不是加密。

    白话:选出 64 个字符集(实际上 65 个, A-Z,a-z,0-9,+,/,再加垫字符 = ),并将内容按照一定的规则转换成字符集的字符。

    索引表:

    64 个 字符

    A~Z -> 0~25
    a~z -> 26~51
    0~9 -> 52~61
    + -> 62
    - -> 63
    

    编码规则:

    1. 每三个字节为一组,一共是 24 个二进制位。

    2. 将 24 个二进制位分为四小组,每小组 6 个二进制位。

    3. 在每小组前面加上 00,构成 32 为二进制,即 4 个字节。

    例如:

    "Cat"
    
    C  ASCII 十进制:67  二进制:0100 0011
    a  ASCII 十进制:97  二进制:0110 0001
    t  ASCII 十进制:116 二进制:0111 0100
    
    合起来为:0100 0011 0110 0001 0111 0100
    分为四组:010000 110110 000101 110100
    添加前缀:00010000 00110110 00000101 00110100
    对应的十进制值为:16 54 5 54
    
    对应上面的索引表:Q2F0
    
    
    • 字节数不足 3 的情况:

      • 2 个字节的情况:

        2 个字节的一共 16 个二进制位,按照上面的规则,转成三组,分别为6,6,4,最后一组除了前面加两个 0 以外,后面也要加两个 0。这样得到一个三位的 Base64 编码,同时在末尾补上一个"="号。

        'Hi'
        
        H ASCII 十进制:72  二进制:0100 1000
        i ASCII 十进制:105 二进制:0110 1001
        
        即:0100 1000 0110 1001
        拆:010010 000110 1001
        补:00010010 00000110 00100100
        组:18 6 36
        对应索引:SGk=
        
        
      • 1 个字节的情况:

        将8位二进制,分为2组,6和2,最后一组2为,前面补两个0,后面补4个0。构成16位两个字节, 并在末尾补上两个==号。

            'H'
            
            H ASCII 十进制:72  二进制:0100 1000
        
            拆:010010 00
            补:00010010 00000000
            组:18 0
            对应索引:SA==
        
        

    其他字符自询搜索 ASCII 表

    解码

    解码其实就是一个逆推的过程。

    1. 每4个字符为一组,查找字符其索引值。

    2. 将其索引值,转为二进制,并将每个二进制前面的00去掉

    3. 将剩下的24位二进制转为分为3份,组成3个字节

    4. 查找ASCII表,组成字符串。

    以梦为马
  • 相关阅读:
    CSS印象不深的小地方
    gulp常用插件的使用
    移动端手势库Hammer.js—增强touch事件或手势
    HTML5拖放与文件操作api,实现拖拽上传文件功能
    Less相关
    gulp使用(一)
    将博客搬至CSDN
    jquery Ajax 通过jsonp的方式跨域提交表单
    解决“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”问题
    使用eclipse4.5创建maven项目
  • 原文地址:https://www.cnblogs.com/lsAxy/p/14864753.html
Copyright © 2011-2022 走看看