术语表

教程里出现的每个专业名词,都在这里给出一句能读懂的解释和它在本站语境下的含义。

教程与原理页面里出现的每个专业名词,这里都给出一句能读懂的定义,再补上它在本站语境下具体指什么。

置乱与还原

混淆
本站对把图片打乱这一动作的统一叫法。它按广义吉尔伯特曲线遍历像素,再把整条序列循环移动 k 位,输出仍是合法图片,只是像素位置被打散。
解混淆
混淆的逆运算,用于把被打乱的图片还原回来。它沿同一条曲线取出序列,反向移动 k 位后写回,前提是宽高一致且中间没有有损编码。
置乱
泛指不改变像素集合、只改变位置的变换。混淆属于置乱的一种,特点是规则固定、无密钥、可逆。置乱后的图片颜色统计与原图完全一致。
置换
把一组元素重新排列的映射。本站的置换定义在 N 个像素上,每个像素有且仅有一个新位置,不会有两个像素争抢同一个位置。
双射
既是单射又是满射的映射,通俗说法就是一一对应。曲线序与位移都必须是双射:每个像素被访问且只被访问一次,因此既不丢像素也不重复写。
可逆变换
存在逆变换、能把结果精确还原的操作。循环移位就是可逆变换,逆操作是朝反方向移动同样位数,这也是解混淆只需知道方向的原因。
恒等变换
什么都不改变的变换。混淆之后紧接着解混淆,两次置换合成的结果就是恒等变换;用 PNG 走完整条链路时,连一个字节都不差。
无损往返
指处理再还原之后像素与处理前逐字节相同。判断方法是全程 PNG、不触发缩放,跑一轮混淆加解混淆后比对校验值。中间经过一次 JPEG 就会破坏无损往返。
位移量
符号 k,指一维序列整体循环移动的位数,公式为 k = round((√5 − 1) / 2 × W × H)。它约为总像素数的 61.8%,完全由图片宽高唯一确定,既不是密钥也没有随机性。
曲线序
按曲线访问顺序得到的一维下标序列,记作 order,长度为 N。混淆与解混淆沿同一个 order 读写,改变的只是搬家的方向。

曲线与数学

空间填充曲线
一条连续路径,能走遍区域内每一个格子且不重复。它把二维区域映射成一维顺序,是混淆第一步的数学基础,也最容易用图示讲清楚。
希尔伯特曲线
最经典的空间填充曲线之一,通过四等分递归构造,只定义在边长为 2 的整数次幂的方形网格上,是本站所用曲线的原型。
吉尔伯特曲线
希尔伯特曲线在任意宽高矩形上的推广,也就是本站实际采用的曲线形式。它能处理 640×480、1920×1080 这类非方形、非幂次的尺寸,遍历同样不重不漏。
递归
把问题拆成同类型的更小问题再求解的做法。曲线构造按四等分递归下降直到最小格子,代码里是一个自我调用的函数。
四等分
把矩形按中线切成四个子块再分别布线,是曲线递归的基本一步。子块宽高要按规则分配,衔接方向也要对齐,否则曲线会交叉或者漏格。
局部性
指一维顺序里靠得近的元素在二维平面上也靠得近。它让位移后的像素落在相邻区域附近,而不是毫无规律地散落全图,也更便于教学演示。
黄金分割
把整体分成 0.618 与 0.382 两部分的比例,数值上等于约 1.618 的倒数。本站用它来定位移量,避免出现明显的整数倍周期。
黄金分割共轭
指 (√5 − 1) / 2 ≈ 0.6180339887,也就是 1/φ。它是位移公式里唯一的常数,作用是把位移量定在总像素数的 61.8% 附近,让结果与原工具一致。
黄金角
约 137.5 度,由黄金分割推出的角度,常用于把点均匀铺在平面上。它与本站的 0.618 同源,都是黄金分割在不同场景下的表现形式。
循环分解
把置换拆成若干个互不相交循环的做法。本站的置换可分解为 gcd(k, N) 个循环,每个循环长度是 N / gcd(k, N),用来分析位移的结构。
最大公约数
两个整数共有的最大因子,记作 gcd。它决定循环个数:位移量 k 与像素数 N 的 gcd 越大,循环越多、每个循环越短,1920×1080 的 gcd 是 135。
模运算
取余运算,本站写作 mod。位移后的下标必须落回 [0, N) 范围内,所以要对 N 取模,这也是循环移位这个说法的由来:越过末尾就回到开头。
线性下标
把二维坐标 (x, y) 压成一个整数的记法,公式是 y*width + x。本站的曲线序用线性下标数组保存,比保存坐标对节省一半以上内存。

图片格式与编码

RGBA
描述单个像素的四个通道:红、绿、蓝与透明度,每个通道通常占 8 位,合计 4 字节。本站按 4 字节一个像素搬运,与像素缓冲布局一致。
像素缓冲
连续存放整张图像素值的内存区域,通常是一个可写字节数组。混淆的实质就是在输入与输出两块缓冲之间,按曲线序做一次成对读写。
画布(Canvas)
浏览器提供的绘图与像素读写接口。本站用它把图片解码成像素、取出像素缓冲、写回结果并导出文件,全部在本地内存中完成。
有损压缩
编码时丢弃部分信息以换取更小体积的方式。JPEG 属于这一类,解压后无法还原原始像素值,这是还原结果出现块状噪点的直接来源。
无损压缩
压缩之后仍能逐字节还原原始数据的编码方式,PNG 属于这一类。全程无损时,混淆再解混淆可以做到与处理前的像素完全相同。
JPEG
最常见的有损图片格式,编码包含 DCT、量化与色度抽样。与原工具一致,本站的 JPEG 输出质量参数取 1;中间存成 JPEG 会破坏无损往返。
PNG
常见的无损图片格式,支持透明通道,体积通常大于 JPEG。在混淆流程里它能保住像素精度,是需要严格还原时的首选输出格式。
DCT 离散余弦变换
JPEG 编码的核心步骤,把 8×8 像素块从空间域变换到频率域。量化会削弱高频系数,因此文字边缘、细线这类内容最容易在编码中失真。
量化
JPEG 里把 DCT 系数除以量化表并取整的步骤,也是全部损失的来源。被抹掉的高频信息无法恢复,解混淆只能把它连同误差一起搬到别处。
色度抽样
JPEG 降低色彩分辨率、保留亮度分辨率的做法。它会让彩色边缘出现色晕,混淆图被还原后表现为细碎的彩边,这也是噪点带颜色的原因。
块效应
JPEG 按 8×8 块独立编码留下的方块状痕迹。混淆把这些块拆散之后,痕迹会散布到整张图中,在还原结果里看起来像随机分布的噪点。
颜色直方图
统计各颜色出现次数的分布图。混淆只换位置、不增减像素,所以颜色直方图与原图完全一致,不能用来判断一张图是否被混淆过。
EXIF
相机写进图片的元数据,包含拍摄参数与方向标记。本站输出经画布重新编码会丢失 EXIF,手机照片则先按方向标记摆正再处理。
色彩空间
描述颜色如何用数值表示,常见的有 sRGB 与 YCbCr。JPEG 会先转到 YCbCr 做色度抽样,解码时再转回来,这一来一回本身也可能带来偏差。
位深
每个颜色通道用多少位来表示,常见的是 8 位,也就是 256 级。本站处理的就是 8 位通道、单像素 32 位,与画布的像素格式保持一致。

使用与工程

本地处理
指计算全部在用户浏览器内完成、图片不上传的做法。本站的解码、置换与编码都走这条路径,因此断网环境同样可以使用。
Worker 线程
浏览器提供的后台执行环境,可以让长时间计算不阻塞界面。批量处理大图时它能避免页面掉帧,代价是线程之间要复制或转移数据。
Blob
浏览器里的二进制大对象,用来承载导出的图片数据。本站把画布导出的结果转成 Blob 再生成下载链接,整个过程不经过服务器。
等比缩放
按同一比例同时缩小宽高,不改变图像的长宽比。图片超过像素上限时会触发等比缩放,代价是像素被重新采样,无损往返随之失效。
像素上限
本站允许处理的单张图片规模上限:800 万像素,并且单边不超过 4000 像素。超限图片先等比缩放再处理,这一限制与原工具一致。
等比采样
缩放时按比例从原图取值生成新像素的方式。新像素来自插值计算,与原图没有一一对应关系,所以缩放之后不可能逐字节还原。
压缩累积
指每一次有损编码都叠加一次误差的现象。混淆图若每轮都存成 JPEG,反复处理会让块状噪点逐步加重,这是操作方式造成的。
时间与空间复杂度
衡量算法开销的两个指标。本站时间是 O(N) 的单遍遍历,空间上曲线序占 4N 字节,输入输出像素各 4N 字节,200 万像素约需 24 MB 内存。
结构化数据
用约定标记向搜索引擎描述页面内容的形式。本站问答页的条目由构建脚本从 details 与 summary 折叠块自动抽取生成,因此问答必须成对完整。
面包屑导航
页面顶部显示层级路径的导航条,用来标明当前位置并支持逐级返回。术语表这类查询页依赖它跳回帮助中心或上一级栏目。

延伸阅读

需要记住一点:混淆没有密钥,任何人都能解混淆,它只能提高直接复用的成本。

本文更新于 2026-10-14。文中算法说明基于本站实际运行的实现整理,行为可通过 _build/verify-core.mjs 复核。

内容为本站原创,转载或引用请注明来源「小番茄混淆解图」并保留原文链接。