基本概念

ASCII 是用128(2的8次方)个字符,对二进制数据进行编码的方式

base64编码是用64(2的6次方)个字符,对二进制数据进行编码的方式

base32就是用32(2的5次方)个字符,对二进制数据进行编码的方式

base16就是用16(2的4次方)个字符,对二进制数据进行编码的方式

Base-64编码保证了二进制数据的安全

Base-64编码可以将任意一组字节转换为较长的常见文本字符序列,从而可以合法地作为首部字段值。Base-64编码将用户输入或二进制数据,打包成一种安全格式,将其作为HTTP首部字段的值发送出去,而无须担心其中包含会破坏HTTP分析程序的冒号、换行符或二进制值。
Base-64编码是作为MIME多媒体电子邮件标准的一部分开发的,这样MIME就可以在不同的合法电子邮件网关之间传输富文本和任意的二进制数据里。Base-64编码与将二进制数据文本化表示的uuencode和BinHex标准在本质上类似,但空间效率更高。

索引表

base64索引表:

base32索引表:

base16索引表:

转码原理

转码

这里只介绍Base-64转码,其他的原理一样

Base-64编码将一个8位子节序列拆散为6位的片段,并为每6位分配一个字符(见索引表)。这64个字符都是很常见的,可以安全地放在HTTP首部字段中。这64个字符中包括大小写字母、数字、+和/,特殊字符=

示例:

上面的三个字符“Man”是原文,下面的四个字符“TWFu”是Base64编码后的字符

经过base64编码后,字符串理论上比之前长1/3,也就是原来的4/3。(除下面两种情况外)。

base64填充

base64编码收到一个8bit字节数据,将这个二进制序列每6bit划分一个块。二进制序列有时不能正好平均地分为6位的块,在这种情况下,就在序列末尾填充零位,使二进制序列的长度成为24的倍数(6和8的最小公倍数)。

  • 6bit里面的数据,全部是填充的,它显示的符号是第65个符号”=”。
  • 6bit里面的数据,部分是填充的,按照索引表正常显示

示例:

输入字符串为”a:a”为3个字节(24位)。24是24的倍数,因此按照上面给出的例子计算。无需填充就会得到base64编码为”YTph”。

输入字符串变为”a:aa”为4个字节(32位)。要凑为24的倍数,最小的值是48。因此要添加16个填充码。

a:a -- 011000 010011 101001 100001 -- YTph
a:aa -- 011000 010011 101001 100001 011000 01xxxx xxxxxx xxxxxx -- YTphYQ==
a:aaa -- 011000 010011 101001 100001 011000 010110 0001xx xxxxxx -- YTphYWE=
a:aaaa -- 011000 010011 101001 100001 011000 010110 000101 1000001 -- YTphYWFh

转码网站:http://tool.chinaz.com/tools/base64.aspx

参考:
base家族:base64、base32和base16这篇文章中介绍的概念有瑕疵
base64编码
让你完全理解base64是怎么回事
百度百科关于base64的转码是错误的,将8bit切分为6bit,不需要在高位补0

base家族:base16、base32和base64,转码原理相关推荐

  1. python:Base16, Base32, Base64, Base85 数据编码

    python:Base16, Base32, Base64, Base85 数据编码 此模块提供了将二进制数据编码为可打印的 ASCII 字符以及将这种编码格式解码回二进制数据的函数. 它为 RFC ...

  2. Python Base64转码解码

    Python Base64 提供了好几种方法例如: encode, decode, encodestring, decodestring, b64encode, b64decode, standard ...

  3. js前端base64转码解码

    我们为什么要用base base64是网络上最常见的用于传输8bit字节代码的编码方式之一.有时我们需要把二进制数据编码为适合放在URL中的形式.这时采用base64编码具有不可读性,即所编码的数据不 ...

  4. base64转码java版

    base64转码java版 package com.net.util;import java.io.FileInputStream; import java.io.FileOutputStream; ...

  5. 签名算法sha256withrsa,RSA数字证书公钥私钥生成,base64转码和文件日志

    RSA数字证书公钥密钥生成: 在Linux系统下运行以下命令生成: 如果提示输出密码,可以为空,直接回车 生成的公钥rsa_public_key.pem和密钥rsa_private_key.pem文件 ...

  6. 直接用img 的src属性显示base64转码后的字符串成图片【原】

    直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="data:image/gif;base64,base64转码后的字符串" ...

  7. java Base64转码传图到C#

    2019独角兽企业重金招聘Python工程师标准>>> 项目碰到一个需求,需要把后台的图片,传到终端去. Java服务端用webService传XMl格式数据到C#终端. 实现的思路 ...

  8. javascript使用btoa和atob来进行Base64转码和解码

    javascript中如何使用Base64转码 let str = 'javascript';let btoaStr = window.btoa(str); //转码结果 amF2YXNjcmlwdA ...

  9. Android数据传输加密(一):Base64转码算法

    前言:本文重点在第4部分,Android中Base64算法的使用,主要是介绍android.util.Base64类,其他为对Base64原理的讲解,不关心原理的小伙伴,可直接阅读第4部分 1.何为B ...

  10. Base64转码过程

    base64 是一个转码技术.专门用来应对二进制转成可视字符,这种场景. 要学习base64转码过程,需要先了解ACSII码表. 有了ASCII码表还需要有base64编码表 base64转码规则: ...

最新文章

  1. 微信小程序开发流程介绍
  2. Jquery获得控件值的方法
  3. 云南大学计算机科学技术是哪个院的,云南大学计算机科学与工程系介绍
  4. C# 类、对象、方法和属性详解(重新排版,页面整洁)
  5. Java编程思想学习(一) 一切都是对象
  6. 信息学奥赛一本通C++语言——1095:数1的个数
  7. JQuery 快速入门一篇通
  8. VB 详细枚举指定目录、文件夹文件列表
  9. 一道经典JS题(关于this)
  10. 远程计算机ip记录怎么删除吗,远程桌面连接清除登陆过的IP地址
  11. 鹏业安装算量软件通风扣减功能
  12. 几款好看的HTML按钮样式
  13. 三分钟快速了解怎么查询ip地址,怎么更换ip地址!
  14. 在传统软件公司十年深恶痛绝的感受
  15. GTA5怎么快速吃零食 回血
  16. 云服务器体验——搭建简单私人网盘
  17. FusionCharts--WEB图表技术
  18. Stata:刀切法-去一法-Jackknife简介
  19. 迅雷下载iso镜像失败(文件重命名失败)
  20. python股票交易编程最好的书_向大家介绍我的新书:《基于股票大数据分析的Python入门实战》...

热门文章

  1. Echarts制作泊松分布图,并加临界线
  2. C# tcpClient发送和接收
  3. xjoi9235区间翻转
  4. mysql修改数据库字段数值_mysql修改数据库字段的操作
  5. 湖北自考 计算机网络,2021年湖北自考计算机网络基础课程考试大纲
  6. 计算机及应用自考好过吗,希望有经验的给我分析一下,我想自考计算机及应用!...
  7. 3DMAX导出网格顶点切向量
  8. 文件后缀名批量修改工具
  9. Linein和Micin的区别
  10. win8 完全禁用uac的方法