如何重新排序文件内容以实现简单的混淆

时间:2013-03-13 07:57:47

标签: linux bash encoding

如果我有一些具有可识别签名的文件,例如Magic Number,无论后缀如何,它们都会在Nautilus中被识别为文档,视频或音频。

如果我想编码它们而不将编码文件本身识别为编码,一个简单的策略可能是在块中重新排序文件内容:

例如,如果文件被拆分为10个大小相等的块(任何余数可以留作可变大小的第11个块,KABCDEFGHIJK,则简单编码将重新排列块顺序:例如 block_encode input_file output_file 将导致输出文件组织为:BADCFEHGJIK。 (当然,我也可以只交换“后半部分”和“上半部分”,在文件末尾可能只有1个字节无动于衷。)

在这种情况下,只需再次应用编码即可实现解码。

生成的文件很可能不会被识别为任何有效的文档,视频,音频等。

我的问题是:使用标准工具(例如dd)是否有任何简洁的方法在bash中实现这一点? (如果需要,我可以写一个C程序。)

后续将是:如果文件是媒体文件,我如何将“已解码”内容流式传输到例如VLC,而不必先将解码后的流保存为文件?

1 个答案:

答案 0 :(得分:1)

我建议使用一个众所周知的密钥进行简单的XOR。它会摧毁文件中的任何幻数,击败file(1),并按顺序操作,因此编码以及流式传输stdin / stdout都很简单。如果您选择一个很好的短XOR键(例如4个八位字节),输出文件将具有与源类似的熵,因此文件已经出现乱码并不是很明显:如此加密的文本文件仍将很好地压缩,例如,而完美加密的pessimal情况根本不压缩(与随机字节的XOR,密钥长度等于文件长度)。

我不太明白这个问题的动机!虽然这种编码虽然被剥离了,但它会破坏大多数文件识别工具,但没有别的。文件中可能仍然存在可用于指纹的模式。