不是「加密」,而是「置换」:矩阵把每个像素搬去新位置,一个不丢、也不多一个。搬得足够多次,图变成彻底的雪花噪声——但置换必循环,转够一圈,原图自己走回来了。
挑一张样例图或上传自己的图,拖动滑条把像素「揉碎」到任意次数。然后——把次数拉满到周期 T,看它原样回来。
或者上传你自己的图
支持 JPG / PNG / WebP · 会自动居中填充为方形每个像素 (x, y) 被矩阵 A 送到新位置 (x+y, x+2y),然后对 N 取模。所有像素一次变换全部换位,一个不少、一个不多——所以它不是「加密」,是「置换」。
坐标算完都要 mod N,像素永远出不了图。而 det(A)=1 保证变换是双射:两个不同像素绝不会撞到同一个位置,所以信息零损耗。
有限集合上的排列,迭代足够多次必然回到起点——这是置换群的基本定理。周期 T 只由边长 N 决定,跟图片内容毫无关系。
「揉碎」看起来像随机噪声,实际上每一步都是严格确定的数学运算。看似无序的雪花背后是一台精确的时钟:对 2 的幂边长 N=2k(k≥3),周期 T = 3·2k-2。512 的图,T=384——不多不少,转够 384 次,原图自动归位。混乱是有周期的。
// 前向:像素 (x, y) 搬去 (x+y, x+2y),全部对 N 取模
function forward(x, y, N) {
return [(x + y) % N, (x + 2 * y) % N];
}
// 逆向:一次变换,从任意置乱状态还原
function inverse(x, y, N) {
return [(2 * x - y) % N, (-x + y) % N];
}
// 周期检测:迭代直到映射变回恒等
function findPeriod(N) {
let cur = forwardMap(N), t = 1;
while (!isIdentity(cur)) {
cur = compose(cur, forwardMap(N)); // 再搬一次
t++;
}
return t; // N=512 → 384
}
一个矩阵、两次取模、一个循环。没有随机数,没有密钥,没有任何「隐藏信息」——纯排列的必然轮回。
先把像素打乱,再做真正的加密——置乱本身不是密码,但它能把明文的结构彻底抹平,让后续加密更安全。
论文/照片加水印前先 Arnold 置乱,水印被分散到全图,裁剪、压缩后依然能抠出来。
Arnold 变换是「确定性系统的不可预测性」最简单直观的例子:规则完全公开,过程却像随机。混沌加密的教科书开场白。
1960 年代,苏联数学家 Vladimir Arnold 用一张猫脸图演示这个变换,猫就成了数学史上最著名的实验动物。