base64原理(附代码) 换表脚本
虽然有在线工具,但是原理这东西还是都要明白才行,不然换汤不换药就不会了噢
base64原理
简单来说就是——“把3个字节变成4个字节”
这么说吧,3个字节一共24个bit
,把这24个bit
依次分成4个组,每个组6个bit
,再把这6个bit
塞到一个字节中去(最高位补两个0就变成8个bit
),就会变成4个字节。没了。
因为6个bit
最多能表示26=6426=64,也就是说Base64编码出来的字符种类只有64个,这也是Base64名字的由来。
应用
- 由于二进制的一些字符在网络协议中属于控制字符,不能直接传送,因此需要用Base64编码之后传输,编码之后传输的是一些很普通的ASCII字符。
- Base64常用于邮件编码,当邮件中有二进制数据时,就要编码转换。
- 图片的编码
- Url中有二进制数据,这个时候需要Base64编码(Web安全的Base64)
- 可以进行简单的加密,Base64的编解码规则是透明的,因此用Base64加密时要加盐。
映射表Alphabet
(图自维基百科)
图解
(图自https://baijiahao.baidu.com/s?id=1644892102150918183&wfr=spider&for=pc)
对重组后的数据处理,每组最前面添加两个“0”,构成每组8个bit。由于在最前面添加的0,所以对数值不构成影响。
这里要注意其实严格上来说base64并不属于加密,只是为了方便传输而已。
到这里你可能会发现貌似只有字节数是3的倍数才能处理啊,那么现实情况中,不是3的倍数的情况多的是,怎么办?
方法::补零加 “=”
号(2个0为一个=)
(图自https://blog.csdn.net/flushhip/article/details/82498670)
因此Base64编码后有时候可以看到=
或者==
这都是正常的。
那么解码的密文就有一定的要求的,从前面的分析中得出来,加密之后形成的密文长度一定是4的倍数,且字符串中的字符一定要在映射表中,或者字符为=
,还有,只可能有一个=
或一个==
。
C++实现base64编码
主要用的是位运算:
/*Encode*/// 0 index byte
index = _group[0] >> 2;
_buf.push_back(_encodeMap[index]);
// 1 index byte
index = ((_group[0] & 0x03) << 4) | (_group[1] >> 4);
_buf.push_back(_encodeMap[index]);
// 2 index byte
index = ((_group[1] & 0x0F) << 2) | (_group[2] >> 6);
_buf.push_back(_encodeMap[index]);
// 3 index byte
index = _group[2] & 0x3F;
_buf.push_back(_encodeMap[index]);
解码关键代码:
/*Decode*/buff[0] = (_decodeMap[_group[0]] << 2) | (_decodeMap[_group[1]] >> 4);
if (_group[2] != '=')
{buff[1] = ((_decodeMap[_group[1]] & 0x0F) << 4) | (_decodeMap[_group[2]] >> 2);top = 2;
}
if (_group[3] != '=')
{buff[2] = (_decodeMap[_group[2]] << 6) | _decodeMap[_group[3]];top = 3;
}for (unsigned int i = 0; i < top; ++i)
{_buf.push_back(buff[i]);
}
完整代码这里就不放出来了,放个传送门上来。
我之前做题的时候就有遇到过换了映射表的base64,其实这就是典型的换汤不换药,不过用在线工具解肯定就不行了,还是要自己写个脚本,如果你理解了上面的原理的话其实这个就不是很难啦
具体例题和脚本见该博客
如果是写脚本解码的话可以直接用python的base64库,然后用base64.b64decode(xxx)函数直接解,具体在这里就不做详解了,可以自己去看一下python的知识。
base64原理(附代码) 换表脚本相关推荐
- LoRa SX1278/76驱动原理 附代码
LoRa SX1278/76驱动原理 附代码 原理解释 LoRa 关键参数说明 前导码: 报头: 显式报头模式: 隐式报头模式: LoRa 调制解调: 扩频因子: 编码率: 信号带宽: 代码说明 SP ...
- 换发型算法_【AI超级美发师】深度学习算法打造染发特效(附代码)
原标题:[AI超级美发师]深度学习算法打造染发特效(附代码) 来源:OpenCV学堂 作者:胡耀武 [新智元导读]如今,在类似天天P图.美图秀秀等手机APP中,给指定照片或视频中的人物更换头发颜色已经 ...
- java乘法表_Java中四种9*9乘法表的实现方式(附代码)
前言: 初学java,实现99乘法表是必学必会的内容. 需求 : 分别写出上下左右,对应四个角的乘法表. 思路: 可以先打印出*星星,形成一个直角三角形,然后再替换成乘法公式. 代码如下: publi ...
- Base64 编码原理及代码实现
Base64 编码原理及代码实现 所谓 base64 编码就是从 ASCII 码表中选取64个可打印字符(A-Za-z0-9+/)作为基本字符集对其它字符进行编码转换.加上作为填充的 "=& ...
- python做excel多表按列合并_python如何实现excel多表合并(附代码)_后端开发
php504错误怎么解决_后端开发 php504错误的解决方法:1.增加fastcgi进程响应的缓冲区大小:2.更改php环境配置,增加php-cgi进程处理脚本的超时时间:3.将php-fpm的处理 ...
- html放大镜原理,Canvas实现放大镜效果完整案例分析(附代码)
本文主要记录 canvas 在图像.文字处理.离屏技术和放大镜特效的实现过程中使用到的API.先看下效果吧: 一张模糊的图片: 鼠标点击任意位置,产生放大效果: 哇塞~ 一个帅哥,哈哈哈哈~ 1.放大 ...
- 广义表的学习(原理和代码)
广义表的学习(原理和代码) 参考链接: https://blog.csdn.net/it_is_me_a/article/details/99870530
- 数据结构之线性表(附代码)
数据结构 之 线性表(附代码) 线性表思维导图: 线性表定义(逻辑结构): 一.顺序表 1.顺序表思维导图: 2.顺序表的逻辑结构: 3.顺序表基本操作的功能实现: 1.线性表的静态定义: 2.线性表 ...
- 洪水攻击程序c语言,洪水攻击原理及代码实现全攻略(附源代码)
下载本文示例代码 推荐:应用程序安全的魔道之争 声明:本文所提供的资料仅仅限于技术交流和学习,请不要用于其他非法目的,维护网络安全是我们的共同责任. 下载本文源代码和例程 一. 什么是洪水攻击 洪水之 ...
- 辗转相除法求最大公约数原理分析(附代码实现)
辗转相除法求最大公约数原理分析(附代码实现) 前言 解释 原理分析 代码 结语 前言 辗转相除法用起来很简单,但是其原理却自己想不明白.于是乎看了几篇有关辗转相除法原理的分析,在这里自己写下自己的理解 ...
最新文章
- CentOS下LAMP一键yum安装脚本
- 搭建apache 文档服务器 ubuntu
- python requests cookies请求_python的requests库怎么发送带cookies的请求
- spring源码分析之freemarker整合
- 限制tomcat带宽_必看的Tomcat性能优化
- nfs服务器实现文件共享,NFS服务器及Samba服务配置实现文件共享(示例代码)
- python实现斐波那契数列
- 五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)
- 《锋利的jQuery》要点归纳(五)jQuery与ajax的应用(上)
- 取代13英寸版?苹果下半年将推出M2版MacBook Pro 14
- MATLAB资源安装免费激活完整步骤
- 卡方检验的统计量推导_卡方检验的卡方检验法的基本原理和步骤
- 《区块链编程》第七章
- python判断数值为空_python判断是空的实例分享
- 如何用计算机弹白山茶,白山茶-陈雪凝-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
- Linux命令 ln
- P处理的中有大量判断条件是的sql写法
- 被ddos攻击,附加IP有作用吗
- 双向长短期记忆网络模型_基于深度双向长短期记忆网络的空气质量预测方法与流程...
- 白手起家成就亿万富翁梦想的企业家和普通人的10点不同之处
热门文章
- 9 个Java 性能优化的 工具,你知道几个?
- Python针对Excel数据的处理(部分)
- PG数据库操作相关问题以及解决
- linux性能监控命令dstat详解【杭州多测师_王sir】【杭州多测师】
- AMOS分析技术:路径分析;用SPSS做路径分析麻烦?那就用AMOS分析吧
- 怎么找回计算机用户名密码怎么办,电脑steam账号密码忘记了怎么办|电脑找回steam账户的方法...
- 如何利用JS生成二维码
- 2021考研数学二汤家凤接力题典1800【题目册】
- plc原理及应用_PLC编程与应用 适合初学者
- CenterOs底下安装redis