base64 数据编码原理
例子
- macOS 终端输入:echo d3d3LmNuYmxvZ3MuY29tL3poZW5nYmlu | base64 -D
- Linux 终端输入:echo d3d3LmNuYmxvZ3MuY29tL3poZW5nYmlu | base64 -d
查看输出
什么是base64?
Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法。可查看 RFC2045~RFC2049,上面有 MIME 的详细规范。
base 64 使用 A-Z、a-z、0-9、+、\,这 64 个字符组成
应用
用 Telnet 客户端远程登录邮件服务器时,提示输入用户名、密码的提示信息和输入的用户名密码信息,是通过 base64 进行编码的
原理
原理是将 3 字节转换成 4 字节(3*8=24=4*6)
- 3 * 8 = 24 = 4 * 6 的含义就是,3 个字节是 24 位,可分为 4 组,每组 6 位,又因为 6 位不能表示一字节,所以在头部补两个 0
- 将字符串转换为对应的 ascii 编码,再将 ascii 编码转换为二进制
- 每次读取六位,不足的用 0 补位
- 因为是 3 字节 转 4 字节,如果字符串不满 3 字节(3 * 8 = 24 位)则用 = 字符补全
举例:
- "A":
- 对应的 ascii 为 65,65 对应的二进制为 01000001
- 只有 1 字节,8 位,那么需要在二进制后补 4 位,8 + 4 = 12 = 2 * 6,也就是补 4 位后,只组成了两组(2个字节),base 64 原理是将 3 字节转为 4 字节,所以剩下的两个字节用 = 字符代替
- 最终 A 加密后为:QQ==
- "AS":
- ascii 分别为 65、83
- 转换为二进制为 01000001、01010011
- 2 * 8 = 16 + 2 = 3 * 6
- 所以,将二进制分为 3 组,每组 6 位,少的两位,末尾补 0
- 也就是 010000、010101、001100 这 3 组
- 然后对这 3 组的首位进行补 0,即 00010000、00010101、00001100
- 对应对照表即:QVM,又因为是 3 字节转 4 字节,所以部 =
- 最终结果就是 QVM=
经过了上面两个例子,发现 2 个字节加密后就是 4 个字节,1 个字节加密后也是 4 个字节
参考资料
[1] Base64加密原理(转)
base64 数据编码原理的更多相关文章
- 二进制;16进制; Byte , Python的bytes类; Base64数据编码; Bae64模块;
参考:中文维基 二进制 位操作(wiki) Byte字节 互联网数据处理:Base64数据编码 Python的模块Base64 16进制简介 python: bytes对象 字符集介绍:ascii 二 ...
- BASE64编码原理分析脚本实现及逆向案例
在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理你又了解多少?今天小编带大家了解一下Base64编码原理分析脚本实现及逆向案例的相关内容. 01编码由来 数 ...
- 一篇文章彻底弄懂Base64编码原理
在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现. Base64的由来 目前Base64已经成为网 ...
- Atitit.Base64编码原理与实现设计
Atitit.Base64编码原理与实现设计 1. Base64编码1 1.1. 为什么要用自己的base64编码方案1 2. Base64编码由来1 3. Base64编码原理1 3.1. 具体来说 ...
- C# 处理base64 以及base64的原理分析
base64的原理, http://www.cnblogs.com/diligenceday/p/6002382.html http://www.cnblogs.com/chengxiaohui/ar ...
- 一篇文章彻底弄懂Base64编码原理(转载)
在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现. Base64的由来 目前Base64已经成为网 ...
- Base64编码原理及应用
最近在做一个H5上传图片并压缩的项目,其过程主要是先将图片上传通过readAsDataURL获取上传图片base64编码,然后根据高宽比将图片画到canvas上实现压缩,在通过toDataURL获取压 ...
- 知识扩展——(转)一篇文章彻底弄懂Base64编码原理
在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现. 一.Base64的由来 目前Base64已经成 ...
- Base64 编码原理
什么是 Base64 编码 Base64 编码是最常见的编码方式,基于 64 个可打印字符来表示任意二进制数据的方法,是从二进制转换到可见字符的过程. 使用场景 数据加密或签名通过 Base64 转换 ...
随机推荐
- bootstrap-table 的 toolbar 能去掉显示吗?
我想禁用所有的toolbar,因为我显示的要求很简单,所以不想要所有的toolbar,这样可以省掉一行,但找不到方法.谢谢! data-show-columns="false"就行 ...
- 站在.NET的角度学安卓的草民笔记1
Java -> .NET 安卓 -> winform/WPF 类继承Activity -> 类继承 For ...
- Oracle 12C -- top-n查询新特性
Oracle 12C -- top-n查询新特性在12C中,增加了一些新的特性.可以指定返回结果集的指定数量的行.或按照百分比返回行. SQL> select count(*) from emp ...
- es5 温故而知新 简单继承示例
// 矩形(构造器/父类) function Rectangle (height, width) { this.height = height; this.width = width; } // 获取 ...
- selenium 实现网页截图
使用webdriver提供的 save_screenshot 方法: from selenium import webdriver driver = webdriver.Chrome() driver ...
- springboot 错误处理
在 java web开发过程中,难免会有一些系统异常或人为产生一些异常.在 RESTful springboot 项目中如何优雅的处理? 分析:在RESTful 风格的springboot 项目中,返 ...
- JAVA日期查询:季度、月份、星期等时间信息
package com.stt.dateChange; import java.text.SimpleDateFormat; import java.util.Calendar; import jav ...
- 网页端,JSON导成CSV文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- laravel路由不生效,404,除了/ 都不行,关于nginx环境下laravel除了默认路由都出现404报错的处理方法
其实出现这个问题只会出现在laravel被部署在二级目录中,其原因是,除了请求根目录/ (http://www.xxx.com/public/),会请求public/index.php 你在浏览器输入 ...
- Axure chrome 扩展显示已损坏的解决方法
下载地址 链接:https://pan.baidu.com/s/11K3t_mvgJg51siO_jNRejg 提取码:goz1 如果链接失效,请留言或站内信提醒我更新 疑问 之前用的好好的Axure ...