拓冰建站拓冰建站
首页 / 资讯中心 / 正文

2026.7.18(15)【补充】Base64隐写原理详解

一、Base64 编码回顾Base64 编码将每3 个字节24 位转换成4 个 Base64 字符每个字符 6 位。但当原始数据不足 3 字节时需要进行补位剩余字节数剩余位数补零位数最终位数等号个数可隐写位置可隐写位数1 字节8 位16 个024 位2个倒数第 3 个字符低 4 位2 字节16 位8 个024 位1个倒数第 2 个字符低 2 位核心原理解码时这些“多余位”会被忽略。修改这些位不会影响解码结果因此可以用来隐藏额外数据。二、实例演示 场景一原始数据剩余 1 个字节密文末尾有1. 标准编码过程假设要编码的明文为A1 个字节步骤说明结果①A的 ASCII 码0x41②转为二进制8 位01000001③补 16 个0凑成 24 位01000001 00000000 00000000④分成 4 组每组 6 位010000/010000/000000/000000⑤转十进制16 / 16 / 0 / 0⑥查标准 Base64 码表Q/Q/A/A最终标准 Base64 编码QQ2. 隐写过程往里面藏数据末尾有→ 可隐写位置是倒数第 3 个字符即第 2 个Q第 2 个Q的索引为 16二进制为010000低 4 位为0000假设要隐藏的数据为1111二进制操作说明结果①原字符索引16 010000②替换低 4 位为1111010000→010111③新索引值23④查码表索引 23 对应字符X编码被修改为QX3. 验证解码步骤说明结果①Q索引 16 →010000—②X索引 23 →010111—③拼接两组 6 位010000 010111④取前 8 位原始数据只有 1 字节01000001⑤转 ASCIIA✅解码结果依然是A不受影响提取隐藏数据时取X索引的低 4 位→1111✅ 场景二原始数据剩余 2 个字节密文末尾有1. 标准编码过程假设要编码的明文为AB2 个字节步骤说明结果①A0x41B0x42—②转为二进制各 8 位01000001/01000010③拼接16 位补 8 个0凑成 24 位01000001 01000010 00000000④分成 4 组每组 6 位010000/010100/001000/000000⑤转十进制16 / 20 / 8 / 0⑥查标准 Base64 码表Q/U/I/A最终标准 Base64 编码QUI2. 隐写过程往里面藏数据末尾有→ 可隐写位置是倒数第 2 个字符即II的索引为 8二进制为001000低 2 位为00假设要隐藏的数据为11二进制操作说明结果①原字符索引8 001000②替换低 2 位为11001000→001011③新索引值11④查码表索引 11 对应字符L编码被修改为QUL3. 验证解码步骤说明结果①Q索引 16 →010000—②U索引 20 →010100—③L索引 11 →001011—④拼接三组 6 位010000 010100 001011⑤取前 16 位原始数据有 2 字节01000001 01000010⑥转 ASCIIAB✅解码结果依然是AB不受影响提取隐藏数据时取L索引的低 2 位→11✅三、总结对照表明文标准 Base64修改后隐写隐藏的二进制被修改的字符提取时取哪几位AQQQX1111第 2 个Q→X低4位ABQUIQUL11I→L低2位四、解码提取思路对于一段包含 n 行 Base64 编码的文本提取隐写数据的算法如下1. 对每一行 Base64 编码 str a. 用标准 Base64 解码再重新编码得到标准形式 row b. 比较 str 和 row 在“可隐写位置”的字符差异 c. 计算索引差值偏移量转为二进制 d. 根据等号个数确定有效位数 - 1个等号 → 取低 2 位对应 2 字节剩余 - 2个等号 → 取低 4 位对应 1 字节剩余 - 无等号 → 无可隐写数据 e. 将取出的位追加到 bin_str 2. 将 bin_str 每 8 位一组转成 ASCII 字符 3. 拼接所有字符得到隐藏的 Flag⚠️注意不同行提取的位数可能不同2 位或 4 位需要按顺序拼接最后转 ASCII。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门