新手一枚,如有错误(不足)请指正,谢谢!!
个人博客:点击进入
参考资料:
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编码方式

  1. 将数据(根据ASCII编码,UTF-8编码等)转成对应的二进制数
  2. 然后将所有的二进制全部串起来,4个二进制位为一组,转化成对应十进制数。
  3. 根据十进制数值找到Base16编码表里面对应的字符

base16是4个比特位表示一个字符,原码是1个字节(8个比特位)表示一个字符,也就是说原先如果使用ASCII编码后的一个字符,现在转化成两个字符。数据量是原先的2倍。

也就是LOVE加密后是4C4F5645

Base16伪代码|实际环境

待补充

Base32编码

Base32编码表格

Base32字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZ234567

Base32编码方式

  1. 将数据(根据ASCII编码,UTF-8编码等)转成对应的二进制数
  2. 然后将所有的二进制全部串起来,5个二进制位为一组,若不足5位则低位补0,转化成对应十进制数。
  3. 若不足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编码方式

  1. 将数据(根据ASCII编码,UTF-8编码等)转成对应的二进制数
  2. 然后将所有的二进制全部串起来,6个二进制位为一组,若不足6位则低位补0,转化成对应十进制数。
  3. 若不足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编码详细学习相关推荐

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

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

  2. base64编码的学习和理解

    编码表如下: 详细请学习:https://en.wikipedia.org/wiki/Base64

  3. python解base16,base32,base64全家桶

    直接看图就好 base多少就改成多少 decode为解密 相应的 encode为加密

  4. Base16和Base64不同的用途

    Base16和Base64是两种常用的编码方式,用于将二进制数据转换为字符串表示形式.它们主要用于在互联网上传输二进制数据,例如电子邮件,文件传输和网络协议中. Base16编码使用16个数字和字母表 ...

  5. 为什么是base64编码,而不是base32、base16、base63?

    Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据.然而直接转换是不行的.因为网络传输只能传输可打印字符. ...

  6. 详细了解base64编码和解码

    base64编码 公司技术一起开会,做任何项目都经常会讨论编码的问题.在这种时候,你就算装不了逼,也不能一脸懵逼呀.编码技术太多,但是常用的基础的必须了解,今天就详细讲解一下base64编码,包括ba ...

  7. ios开发Base64编码以及加密相关学习

    一:.Base64补充 ```objc 1.Base64简单说明 描述:Base64可以成为密码学的基石,非常重要. 特点:可以将任意的二进制数据进行Base64编码 结果:所有的数据都能被编码为并只 ...

  8. 猿人学12题超详细解题思路-入门级js(base64编码)

    前言:服务器为了防止获取他们的数据,可谓是使用各种方法,js逆向可以很方便的解析出来一些加密数据,毕竟道高一尺魔高一丈,今天告诉大家袁人学第12题的解题思路,超详细解题思路. 需求:          ...

  9. Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略

    Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...

  10. 前端Base64编码知识,一文打尽

    原文: https://juejin.cn/post/6989391487200919566 作者: 云的世界 掘金专栏: 前端基础进阶 健康满分 关注并将「趣谈前端」设为星标 每天定时分享技术干货/ ...

最新文章

  1. InnoDB与Myisam比较
  2. 【ACM】杭电OJ 2552
  3. Android老版本项目导入到新版SDK提示错误
  4. Linux运维趋势采摘 -14期 【第一次编辑】
  5. iPhone 13将减产1000万部,因特定芯片供应不足
  6. 在哪能看全国计算机考试试题,2016年全国计算机一级考试试题汇集
  7. CentOS 6.5 中安装Jenkins
  8. html中文本框改变事件,JavaScript onchange 事件:表单文本域或选择域发生改变
  9. 超级实用且不花哨的js代码大全 (六) ----代码判断,幻灯片播放器,广告效果
  10. android 平板root,安卓平板电脑怎么root 安卓平板一键root方法_硬件教程
  11. 伺服受到干扰?丢脉冲?到底是什么现象?请看这里。。。。
  12. JS打开新的页面(当前页面打开、新的页面打开)
  13. 苹果安装app的另一种方式(通过itms-services协议,不通过AppStore,直接安装IOS应用程序)
  14. Java绘制笛卡尔心形线
  15. 微信小程序加载圆形图片
  16. 3D城市模型、实景城市图...航测无人机轻松构建另一个世界
  17. 头脑风暴问题:玻璃水果盘的用法
  18. TB-RK1808M0最新固件烧录和驱动更新
  19. 软工专硕考研_03 2018年考研经验贴:西安交通大学软件工程专硕
  20. 计算机网络技术的就业前景

热门文章

  1. python项目打包成whl文件
  2. Basler千兆网相机使用相关设置
  3. python遍历json_python3如何遍历json数据
  4. 随机森林简单回归预测
  5. vs2010格式化html,VS中的快捷键快速格式化代码,使好看,整齐
  6. 使用计算机录制声音10,Win10怎么录制电脑内部声音 Windows10电脑自身录音教程
  7. 用电机进行简单的PID参数整定
  8. Unity Shader入门精要学习笔记 - 第11章 让画面动起来
  9. 四大常用视频接口对比
  10. 三菱f800变频器 频率设定_三菱plc和变频器通讯怎么设置频率