Base16,Base32,Base64编码详细学习
新手一枚,如有错误(不足)请指正,谢谢!!
个人博客:点击进入
参考资料:
base16,base32,base64 编码方式的通俗讲解
Base16,Base32,Base64编码的介绍
base58编码原理和实现
python3.x中如何使用base64、base32、base16编码解码
Base编码
Base16编码
Base16编码表格
Base16字符表:0123456789ABCDEF
下标 | 编码值 | 下标 | 编码值 |
---|---|---|---|
0 | 0 | 8 | 8 |
1 | 1 | 9 | 9 |
2 | 2 | 10 | A |
3 | 3 | 11 | B |
4 | 4 | 12 | C |
5 | 5 | 13 | D |
6 | 6 | 14 | E |
7 | 7 | 15 | F |
Base16编码方式
- 将数据(根据ASCII编码,UTF-8编码等)转成对应的二进制数
- 然后将所有的二进制全部串起来,4个二进制位为一组,转化成对应十进制数。
- 根据十进制数值找到Base16编码表里面对应的字符
base16是4个比特位表示一个字符,原码是1个字节(8个比特位)表示一个字符,也就是说原先如果使用ASCII编码后的一个字符,现在转化成两个字符。数据量是原先的2倍。
也就是LOVE加密后是4C4F5645
Base16伪代码|实际环境
待补充
Base32编码
Base32编码表格
Base32字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
Base32编码方式
- 将数据(根据ASCII编码,UTF-8编码等)转成对应的二进制数
- 然后将所有的二进制全部串起来,5个二进制位为一组,若不足5位则低位补0,转化成对应十进制数。
- 若不足40位,则补"="
一个"="相当于5位,补满40位为止。
例:
最后01不足5位,低位补全0。补为01000,也就是8
然后这才35位,需要末尾补一个"="
所以LOVE用Base32编码后得到JRHVMRI=
Base32伪代码|实际环境
v3 = 0;v4 = 0;v28 = 0;v5 = 0;v25 = 0;v6 = 0;if ( v30 ){do{if ( !*(_BYTE *)(v6 + v2) ) // v2为字符串首地址,v6为0开始遍历break;++v6;v5 += 8;++v3;}while ( v6 < v30 ); // 循环完,v5为将所有字符转换为二进制位、的位数// v28 = v3;}switch ( v5 % 40 ) // 这里对位数是否能整除40做判断,来判断是否添加'='// v4等于多少就添加几个'='{case 8u:v4 = 6;goto LABEL_10;case 16u:v4 = 4;goto LABEL_10;case 24u:v4 = 3;goto LABEL_10;case 32u:v4 = 1;
LABEL_10:v25 = v4;break;default:break;}v29 = (8 * v3 + 4) / 5; // 除以5,算一下转换后数据个数// +4的原因是,向上取整,让余数也算一个数据
Base64编码
Base64编码表格
使用了ASCII编码中64个可打印的字符(大写字母A ~ Z,小写字母a ~ z,数字0~9以及"+","/")
Base64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Base64编码方式
- 将数据(根据ASCII编码,UTF-8编码等)转成对应的二进制数
- 然后将所有的二进制全部串起来,6个二进制位为一组,若不足6位则低位补0,转化成对应十进制数。
- 若不足24位,则补"="
一个"=“想当于6个二进制位。
例:
最后只有4位,低位补全0,则为111100
然后3*6=18 不足24位,加上一个”="
LO加密后是TE8=
Base64伪代码|实际环境
当函数头是这种时候,大概率是Base64加密,然后根据字符集来确认
Base64url 编码
字符表中的 ‘+’ → ‘-’ , ‘/’ → ‘_’
总结
名称 | 下标数字的位个数 | 编码表字符串 | 位数不足是否会补全= | 编码后数据量变化 |
---|---|---|---|---|
base16 | 4 | 数字0~ 9和字母A~F | 不会,位数刚好是4的倍数 | 由一个8位表示一个字符 变成 4位表示一个字符,数据量变为原来的2倍 |
base32 | 5 | 大写字母A~ Z 和 数字2~7 | 会 | 变为 8/5 倍 |
base64 | 6 | 大写字母A~ Z,小写字母a~ z,数字0~9以及"+","/" | 会 | 变为 8/6=4/3 倍 |
Base加解密|Python实现
Base16加解密实现
Base16加解密(原始字符表)
import base64
original = 'wo tai nan le'
print("1 original: ",type(original),original)
print("2 original.encode('utf-8'): ",type(original.encode('utf-8')),original.encode('utf-8'))
str_encode = base64.b16encode(original.encode('utf-8'))
print("3 str_encode: ",type(str_encode),str_encode)
print("4 str(str_encode,'utf-8'): ",type(str(str_encode,'utf-8')),str(str_encode,'utf-8'))
str_decode = base64.b16decode(str_encode)
print("5 str_decode: ",type(str_decode),str_decode)
print(str(str_decode,'utf-8'))
输出结果为
关键代码:
base64.b16encode(<'bytes'>) #base16编码
base64.b16decode(<'bytes'>) #base16解码
可以知道,在python3.7中
base64.b16encode(X) 其中需要加密的类型为’bytes’
(其中16可自行替换为16 32 64)
同时,加密后的类型也为’bytes’类型
所以加密的时候需要将 str 类型先转换为 bytes 类型:
例如:origin是一个 str 类型,则origin.encode('utf-8')
则为 bytes 类型
而将 bytes 类型先转换为 str 类型:
代码:str(origin,'utf-8')
其中origin是需要转换的 bytes 类型数据
Base16加解密(自定义字符表)
Base16的原始字符表为:0123456789ABCDEF
倘若我们替换成abcdef0123456789
用到两个方法
str.maketrans(intab, outtab) //用于创建字符映射的转换表
intab -- 字符串中被替代的字符组成的字符串。
outtab -- 用来替换的字符串。
后者替换前者
#第三个参数此处不讨论
此处的str不可改str.translate(table[, deletechars]) //根据参数table给出的表转换字符串的字符
table -- 翻译表,翻译表是通过maketrans方法转换而来。
deletechars -- 字符串中要过滤的字符列表。#第二个参数此处不讨论
此处的str为需要转换的字符串,自行根据自己字符串取的名称进行更换
实例
intab = "like"
outtab = "love"
biao = str.maketrans(intab, outtab)
origin = "I like you"
print(origin.translate(biao))
输出
加解密实例
import base64
origin = 'wo tai nan le!!'
biao1 = str.maketrans("0123456789ABCDEF","abcdef0123456789")
str_encode = base64.b16encode(origin.encode('utf-8'))
encode = str(str_encode,'utf-8').translate(biao1)
print(encode)
biao2 = str.maketrans("abcdef0123456789","0123456789ABCDEF")
str_decode = base64.b16decode(encode.translate(biao2).encode('utf-8'))
print(str(str_decode,'utf-8'))
输出
1109ca1e0b03ca080b08ca060fcbcb
wo tai nan le!!
Base32加解密实现
同Base16加解密,将b16改为b32即可
Base64加解密实现
同Base16加解密,将b16改为b64即可
Base16,Base32,Base64编码详细学习相关推荐
- python:Base16, Base32, Base64, Base85 数据编码
python:Base16, Base32, Base64, Base85 数据编码 此模块提供了将二进制数据编码为可打印的 ASCII 字符以及将这种编码格式解码回二进制数据的函数. 它为 RFC ...
- base64编码的学习和理解
编码表如下: 详细请学习:https://en.wikipedia.org/wiki/Base64
- python解base16,base32,base64全家桶
直接看图就好 base多少就改成多少 decode为解密 相应的 encode为加密
- Base16和Base64不同的用途
Base16和Base64是两种常用的编码方式,用于将二进制数据转换为字符串表示形式.它们主要用于在互联网上传输二进制数据,例如电子邮件,文件传输和网络协议中. Base16编码使用16个数字和字母表 ...
- 为什么是base64编码,而不是base32、base16、base63?
Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据.然而直接转换是不行的.因为网络传输只能传输可打印字符. ...
- 详细了解base64编码和解码
base64编码 公司技术一起开会,做任何项目都经常会讨论编码的问题.在这种时候,你就算装不了逼,也不能一脸懵逼呀.编码技术太多,但是常用的基础的必须了解,今天就详细讲解一下base64编码,包括ba ...
- ios开发Base64编码以及加密相关学习
一:.Base64补充 ```objc 1.Base64简单说明 描述:Base64可以成为密码学的基石,非常重要. 特点:可以将任意的二进制数据进行Base64编码 结果:所有的数据都能被编码为并只 ...
- 猿人学12题超详细解题思路-入门级js(base64编码)
前言:服务器为了防止获取他们的数据,可谓是使用各种方法,js逆向可以很方便的解析出来一些加密数据,毕竟道高一尺魔高一丈,今天告诉大家袁人学第12题的解题思路,超详细解题思路. 需求: ...
- Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略
Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...
- 前端Base64编码知识,一文打尽
原文: https://juejin.cn/post/6989391487200919566 作者: 云的世界 掘金专栏: 前端基础进阶 健康满分 关注并将「趣谈前端」设为星标 每天定时分享技术干货/ ...
最新文章
- InnoDB与Myisam比较
- 【ACM】杭电OJ 2552
- Android老版本项目导入到新版SDK提示错误
- Linux运维趋势采摘 -14期 【第一次编辑】
- iPhone 13将减产1000万部,因特定芯片供应不足
- 在哪能看全国计算机考试试题,2016年全国计算机一级考试试题汇集
- CentOS 6.5 中安装Jenkins
- html中文本框改变事件,JavaScript onchange 事件:表单文本域或选择域发生改变
- 超级实用且不花哨的js代码大全 (六) ----代码判断,幻灯片播放器,广告效果
- android 平板root,安卓平板电脑怎么root 安卓平板一键root方法_硬件教程
- 伺服受到干扰?丢脉冲?到底是什么现象?请看这里。。。。
- JS打开新的页面(当前页面打开、新的页面打开)
- 苹果安装app的另一种方式(通过itms-services协议,不通过AppStore,直接安装IOS应用程序)
- Java绘制笛卡尔心形线
- 微信小程序加载圆形图片
- 3D城市模型、实景城市图...航测无人机轻松构建另一个世界
- 头脑风暴问题:玻璃水果盘的用法
- TB-RK1808M0最新固件烧录和驱动更新
- 软工专硕考研_03 2018年考研经验贴:西安交通大学软件工程专硕
- 计算机网络技术的就业前景