base64原理+base64隐写

2023-11-08

借鉴一位大佬的博客,说一下base64原理及base64隐写的原理:

转载自大佬博客:https://www.tr0y.wang/2017/06/14/Base64steg/

BASE64 是一种编码方式, 是一种可逆的编码方式.
编码后的数据是一个字符串, 包含的字符为: A-Za-z0-9+/
共 64 个字符:26 + 26 + 10 + 1 + 1 = 64
其实是 65 个字符, “=”是填充字符.

64 个字符需要 6 位二进制来表示, 表示成数值为 0~63.
Base64 表

这样, 长度为 3 个字节的数据经过 Base64 编码后就变为 4 个字节

编码

比如, 字符串”Tr0”经过 Base64 编码后变为”VHIw”
Tr0

上面说的字符串长度为 3 个字节的数据位数是 8x3=24, 可以精确地分成 6x4.
如果字节数不是 3 的倍数, 则位数就不是 6 的倍数, 那么就不能精确地划分成 6 位的块.
此时, 需在原数据二进制值后面添加零, 使其字节数是 6 的倍数.
然后, 在编码后的字符串后面添加 1 个或 2 个等号”=”, 表示所添加的零值字节数.
比如, 字符串”Tr0y”经过 Base64 编码后变为”VHIweQ==”

Tr0y

橙色底纹就是添加的 0.
这是 Base64 编码的方式.

解码

解码就是编码的逆过程.

  1. 把 Base64 字符串去掉等号, 转为二进制数(VHIweQ== -> VHIweQ -> 010101000111001000110000011110010000).
  2. 从左到右, 8 个位一组, 多余位的扔掉, 转为对应的 ASCII 码(01010100 01110010 00110000 01111001 0000 -> 扔掉最后 4 位 -> 01010100 01110010 00110000 01111001 -> Tr0y)

隐写原理

注意红色的 0, 我们在解码的时候将其丢弃了, 所以这里的值不会影响解码. 所以我们可以在这进行隐写.
为什么等号的那部分 0 不能用于隐写? 因为修改那里的二进制值会导致等号数量变化, 解码的第 1 步会受影响. 自然也就破坏了源字符串.
而红色部分的 0 是作为最后一个字符二进制的组成部分, 还原时只用到了最后一个字符二进制的前部分, 后面的部分就不会影响还原.
唯一的影响就是最后一个字符会变化. 如下图
隐写
如果你直接解密’VHIweQ==’与’VHIweR==’, 得到的结果都是’Tr0y’.

当然, 一行 base64 顶多能有 2 个等号, 也就是有 2*2 位的可隐写位. 所以我们得弄很多行, 才能隐藏一个字符串, 这也是为什么题目给了一大段 base64 的原因.
接下来, 把要隐藏的 flag 转为 8 位二进制, 塞进去就行了.

 以上就是隐写的原理了,这里以一个题目为例。

题目给了一个加密了的压缩包,伪加密破解得到许多的base64码:
 

U3RlZ2Fub2dyYXBoeSBpcyB0aGUgYXJ0IGFuZCBzY2llbmNlIG9m
IHdyaXRpbmcgaGlkZGVuIG1lc3NhZ2VzIGluIHN1Y2ggYSB
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

base64原理+base64隐写 的相关文章

随机推荐

  • 自定义Starter详细教程

    什么是Starter Starter是Spring Boot中的一个非常重要的概念 Starter相当于模块 它能将模块所需的依赖整合起来并对模块内的Bean根据环境 条件 进行自动配置 使用者只需要依赖相应功能的Starter 无需做过多
  • 粒子群算法简单应用(Matlab实现)

    求解问题 求函数 y 11 sin x 7 cos 5 x 的最大值 x 3 3 核心公式 位置更新公式 x d 1 x d v d t 速度更新公式 v d w v d c1 r1 p best x d c2 r2 g best x d
  • PCL 基于八叉树的体素滤波

    目录 一 算法概述 二 代码实现 三 结果展示 四 参考链接 一 算法概述 PCL的VoxelGrid类和ApproximateVoxelGrid类实现基于体素的滤波方法对点云进行下采样 八叉树同样也是建立体素 因此基于八叉树的体素同样可以
  • 芝诺悖论2 阿基里斯与乌龟

    前两天看到吴军介绍芝诺及其悖论的文章 其中关于其中第二个悖论 据说曾经难倒过亚里斯多德 这倒令我想起一件往事 这个悖论可以这样描述 古希腊英雄阿基里斯与乌龟赛跑 乌龟的速度为v 阿基里斯的速度是乌龟的m倍 令乌龟先跑出一段距离d后比赛开始
  • 大数据毕设 大数据上海租房数据爬取与分析可视化 -python 数据分析 可视化

    文章目录 1 课题背景 2 实现效果 3 获取房源数据 3 1 确定URL 3 2 解析页面 3 3 反爬虫解决措施 4 K means聚类算法 算法实现关键问题说明 聚类结果分析 5 部分核心代码 6 最后 1 前言 这两年开始毕业设计和
  • 北京邮电大学 计算机视觉与深度学习 鲁鹏 计算机视觉概述课程手迹

    课程笔记 计算机视觉 输入 认知神经科学 理论 运用方法 算法 硬件 输出 机器人 课程 图像处理 CS131 图像结构 CS231a 图像理论 CS230 CS231n Q 象棋与人工智能的关系 IBM 深蓝 Google AlphaGo
  • 【unity】【游戏开发】使用NGUI制作可以左右切换的菜单

    啦啦啦 博客 时间 周一到今天 不行不行的制作了项目中的一个小功能 是一个左右切换的菜单 如图所示 我是图 p 总结了一点点小心得 拿出来嘚瑟一下 各位看官 我知道你们和我一样没钱 捧个人场吧 T T 上图咯 当当当当 自带背后闪金光 效果
  • 2023-04-04 网工进阶(四十一)大型WLAN组网---概述、VLAN Pool、DHCP技术、漫游技术、高可靠性技术、准入控制技术、配置举例(漫游失败,未完待续)

    概述 目前 大多数企业办公环境同时使用有线和无线网络来支撑业务 办公区在提供有线网口的同时 也采用全Wi Fi覆盖 办公环境更为开放和智能 未来 企业云桌面办公 智真会议 4K视频等大带宽业务将从有线网络迁移至无线网络 而VR AR 虚拟助
  • java静态属性_java中静态属性与动态属性的区别

    为什么static不用创建对象就可以被调用 在未创建对象之前 所有静态属性或方法都放在元数据区里 静态的可通过类名调用 例如 public class Cat public static String name 静态的 不创建对象都存在 p
  • MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    MATLAB 基于长短期记忆网络 LSTM 的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年 随着计算机技术的不断发展 神经网络在预测方面的应用愈加广泛 尤其是长
  • CMake option选项开关

    CMake option 使用场景 编译脚本传递参数 gt CMake脚本接收option gt 源代码宏 编译脚本传入参数 传入一个cmake option TEST DEBUG bin sh cmake DTEST DEBUG ON c
  • CentOS7安装JAVA Mysql Tomcat Nginx 详细步骤

    CentOS7安装JAVA Mysql Tomcat Nginx 1 CentOS 7 JAVA 安装 在usr local src 下创建文件夹 将jdk放到文件夹中 1 查看当前Linux系统是否已经安装java 输入 rpm qa g
  • 两种常见的缓存淘汰算法LFU&LRU

    1 LFU 1 1 原理 LFU Least Frequently Used 算法根据数据的历史访问频率来淘汰数据 其核心思想是 如果数据过去被访问多次 那么将来被访问的频率也更高 1 2 实现 LFU的每个数据块都有一个引用计数 所有数据
  • 我不允许2022年还没有程序员看过这份Docker学习笔记,看完就知道有多香

    前言 种一棵树最好的时间是十年前 其次是现在 很多程序员一开始在学习上找不到方向 但我想在渡过了一段时间的新手期之后这类问题大多都会变得不再那么明显 工作的方向也会逐渐变得清晰起来 但是没过多久 能了解到的资料就开始超过每天学习的能力 像是
  • Node.js中的断言处理

    在Node js中 可以利用assert模块进行断言处理 即书写一些判断用测试代码 如果判断结果为假 则抛出AssertionError异常 判断两个值是否相等 assert equal actual expected message ac
  • mysql清空表,id重新开始计算

    清空表 1 自增的id重新从1开始 如果有外键的话可能出错 使用方法2 truncate table 你的表名 2 先清除表 然后设置自增字段从1重新开始 DELETE FROM article ALTER TABLE article au
  • npm安装、切换淘宝镜像

    npm默认镜像源是国外的 安装依赖速度较慢 使用国内的镜像源速度会快一些 1 设置淘宝镜像源 npm config set registry https registry npmmirror com 2 查看当前镜像源 npm config
  • 拷贝、赋值和销毁

    拷贝 1 拷贝构造函数 如果一个构造函数的第一个参数是自身类类型的引用 且任何额外参数都有默认值 则此构造函数为拷贝构造函数 拷贝初始化不仅在我们用 定义变量时发生 以下情况也会发生 将一个对象作为实参传递给一个非引用类型的形参 从一个返回
  • redisCluster中模糊获取key

    在一个集群中 显然不能通过keys方法通过pattern直接获取key的集合 鉴于这种问题 产生了两种思路 如下 方案1 已知相同的tag的KV会在一个节点上 所以只要key带有相同的hashtag 则会在一个节点上 所以只要扫描该节点即可
  • base64原理+base64隐写

    借鉴一位大佬的博客 说一下base64原理及base64隐写的原理 转载自大佬博客 https www tr0y wang 2017 06 14 Base64steg BASE64 是一种编码方式 是一种可逆的编码方式 编码后的数据是一个字