虽然有在线工具,但是原理这东西还是都要明白才行,不然换汤不换药就不会了噢

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原理(附代码) 换表脚本相关推荐

  1. LoRa SX1278/76驱动原理 附代码

    LoRa SX1278/76驱动原理 附代码 原理解释 LoRa 关键参数说明 前导码: 报头: 显式报头模式: 隐式报头模式: LoRa 调制解调: 扩频因子: 编码率: 信号带宽: 代码说明 SP ...

  2. 换发型算法_【AI超级美发师】深度学习算法打造染发特效(附代码)

    原标题:[AI超级美发师]深度学习算法打造染发特效(附代码) 来源:OpenCV学堂 作者:胡耀武 [新智元导读]如今,在类似天天P图.美图秀秀等手机APP中,给指定照片或视频中的人物更换头发颜色已经 ...

  3. java乘法表_Java中四种9*9乘法表的实现方式(附代码)

    前言: 初学java,实现99乘法表是必学必会的内容. 需求 : 分别写出上下左右,对应四个角的乘法表. 思路: 可以先打印出*星星,形成一个直角三角形,然后再替换成乘法公式. 代码如下: publi ...

  4. Base64 编码原理及代码实现

    Base64 编码原理及代码实现 所谓 base64 编码就是从 ASCII 码表中选取64个可打印字符(A-Za-z0-9+/)作为基本字符集对其它字符进行编码转换.加上作为填充的 "=& ...

  5. python做excel多表按列合并_python如何实现excel多表合并(附代码)_后端开发

    php504错误怎么解决_后端开发 php504错误的解决方法:1.增加fastcgi进程响应的缓冲区大小:2.更改php环境配置,增加php-cgi进程处理脚本的超时时间:3.将php-fpm的处理 ...

  6. html放大镜原理,Canvas实现放大镜效果完整案例分析(附代码)

    本文主要记录 canvas 在图像.文字处理.离屏技术和放大镜特效的实现过程中使用到的API.先看下效果吧: 一张模糊的图片: 鼠标点击任意位置,产生放大效果: 哇塞~ 一个帅哥,哈哈哈哈~ 1.放大 ...

  7. 广义表的学习(原理和代码)

    广义表的学习(原理和代码) 参考链接: https://blog.csdn.net/it_is_me_a/article/details/99870530

  8. 数据结构之线性表(附代码)

    数据结构 之 线性表(附代码) 线性表思维导图: 线性表定义(逻辑结构): 一.顺序表 1.顺序表思维导图: 2.顺序表的逻辑结构: 3.顺序表基本操作的功能实现: 1.线性表的静态定义: 2.线性表 ...

  9. 洪水攻击程序c语言,洪水攻击原理及代码实现全攻略(附源代码)

    下载本文示例代码 推荐:应用程序安全的魔道之争 声明:本文所提供的资料仅仅限于技术交流和学习,请不要用于其他非法目的,维护网络安全是我们的共同责任. 下载本文源代码和例程 一. 什么是洪水攻击 洪水之 ...

  10. 辗转相除法求最大公约数原理分析(附代码实现)

    辗转相除法求最大公约数原理分析(附代码实现) 前言 解释 原理分析 代码 结语 前言 辗转相除法用起来很简单,但是其原理却自己想不明白.于是乎看了几篇有关辗转相除法原理的分析,在这里自己写下自己的理解 ...

最新文章

  1. CentOS下LAMP一键yum安装脚本
  2. 搭建apache 文档服务器 ubuntu
  3. python requests cookies请求_python的requests库怎么发送带cookies的请求
  4. spring源码分析之freemarker整合
  5. 限制tomcat带宽_必看的Tomcat性能优化
  6. nfs服务器实现文件共享,NFS服务器及Samba服务配置实现文件共享(示例代码)
  7. python实现斐波那契数列
  8. 五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)
  9. 《锋利的jQuery》要点归纳(五)jQuery与ajax的应用(上)
  10. 取代13英寸版?苹果下半年将推出M2版MacBook Pro 14
  11. MATLAB资源安装免费激活完整步骤
  12. 卡方检验的统计量推导_卡方检验的卡方检验法的基本原理和步骤
  13. 《区块链编程》第七章
  14. python判断数值为空_python判断是空的实例分享
  15. 如何用计算机弹白山茶,白山茶-陈雪凝-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
  16. Linux命令 ln
  17. P处理的中有大量判断条件是的sql写法
  18. 被ddos攻击,附加IP有作用吗
  19. 双向长短期记忆网络模型_基于深度双向长短期记忆网络的空气质量预测方法与流程...
  20. 白手起家成就亿万富翁梦想的企业家和普通人的10点不同之处

热门文章

  1. 9 个Java 性能优化的 工具,你知道几个?
  2. Python针对Excel数据的处理(部分)
  3. PG数据库操作相关问题以及解决
  4. linux性能监控命令dstat详解【杭州多测师_王sir】【杭州多测师】
  5. AMOS分析技术:路径分析;用SPSS做路径分析麻烦?那就用AMOS分析吧
  6. 怎么找回计算机用户名密码怎么办,电脑steam账号密码忘记了怎么办|电脑找回steam账户的方法...
  7. 如何利用JS生成二维码
  8. 2021考研数学二汤家凤接力题典1800【题目册】
  9. plc原理及应用_PLC编程与应用 适合初学者
  10. CenterOs底下安装redis