如果我有一些具有可识别签名的文件,例如Magic Number , 它们在 Nautilus 中被识别为文档、视频或音频,无论后缀如何。
如果我想在编码文件本身不被识别为已编码的情况下对它们进行编码,一个简单的策略可能是以 block 为单位重新排序文件内容:
例如,如果文件被分成 10 个大小相等的 block (任何剩余部分都可以作为可变大小的第 11 个 block ,K
)ABCDEFGHIJK
,一个简单的encoding 会重新排列 block 顺序:例如
block_encode input_file output_file
将导致输出文件组织为:BADCFEHGJIK
。
(当然,我也可以只交换“后半部分”和“前半部分”,在文件末尾留下大约 1 个字节不变)。
在这种情况下,只需再次应用编码即可实现解码。
生成的文件很可能不会被识别为任何有效的文档、视频、音频等。
我的问题是:是否有使用标准工具(例如 dd
)在 bash 中实现此功能的巧妙(简单)方法? (如果需要,我可以编写 C 程序)。
后续将是:如果文件是媒体文件,我如何才能将“解码”内容流式传输到 VLC 等,而不必先将解码流另存为文件?
最佳答案
我建议使用一个众所周知的 key 进行简单的 XOR。它会在文件中显示任何魔数(Magic Number),打败 file
(1),并按顺序操作,因此编码和通过 stdin/stdout 流式传输都非常简单。如果您选择一个不错的短 XOR key (例如 4 个八位字节),则输出文件将具有与源文件相似的熵,因此不会立即明显看出该文件已被乱码:如此加密的文本文件仍然可以很好地压缩,例如,而完美加密的悲观情况根本不压缩(这将是随机字节的异或, key 长度等于文件长度)。
虽然我不太明白这个问题的动机!虽然使用这种编码并剥离了扩展名,但它将打败大多数文件识别工具,但除此之外别无他法。文件中很可能仍有模式可用于对其进行指纹识别。
关于linux - 如何重新排序文件内容以实现简单的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15379766/