在 jpeg 文件中分发
忽略元信息和 jpeg-header-data,jpeg 的有效负载由描述哈夫曼表或编码 MCU 的块组成(最小编码单元,大小为 16x16 的方形块)。可能还有其他的,但这是最常见的。
这些块由 分隔0xFF 0xSS
,其中0xSS
是特定的起始码。这是第一个问题:正如评论中提到的twalberg0xFF
一样,它更频繁一些。
它可能发生0xFF
在编码的 MCU 中。为了区分这个正常的有效载荷和新块的开始,0xFF 0x00
插入。如果未填充的有效载荷的分布完全均匀,0x00
则填充数据中的频率将增加一倍。更糟糕的是,每个 MCU 都充满了二进制文件以实现字节对齐(稍微偏向较大的值),我们可能需要再次填充。
可能还有其他一些我不知道的因素。如果您需要更多信息,您必须提供 jpeg 文件。
关于你的基本假设:
对于 rand_data:
dd if=/dev/urandom of=rand_data count=4096 bs=256
对于 rand_pseudo (python):
s = "".join(chr(i) for i in range(256))
with file("rand_pseudo", "wb") as f:
for i in range(4096):
f.write(s)
两者在字节值方面都应该是统一的,不是吗?;)
$ ll rand_*
-rw-r--r-- 1 apuch apuch 1048576 2012-12-04 20:11 rand_data
-rw-r--r-- 1 apuch apuch 1048967 2012-12-04 20:13 rand_data.tar.gz
-rw-r--r-- 1 apuch apuch 1048576 2012-12-04 20:14 rand_pseudo
-rw-r--r-- 1 apuch apuch 4538 2012-12-04 20:15 rand_pseudo.tar.gz
均匀分布可能表示高熵,但不能保证。此外,rand_data 可能包含 1MB 的0x00
. 它极不可能,但有可能。