有没有办法根据文件内容识别或检查AES加密文件(就像通过在文件开头查找字母“PK”来识别ZIP文件的方式)?是否有与AES加密文件相关联的幻数?
我们在工作流存储库中有多个文件,这些文件是纯文本(可以是excel,XML,JSON,文本等)或AES-256加密,并且不知道哪些是AES加密的。我需要编写Java代码来识别AES加密文件并自动解密。谢谢!
答案 0 :(得分:3)
在没有任何标准标题的情况下,您可以查看字节频率。 AES加密数据(或者实际上用合适的算法加密的任何东西)似乎是随机的字节序列。这意味着字节值0-255的分布将近似平坦(即所有字节值都是相同的)。
但是,文本文档主要包含可打印的字符 - 有些字符比其他字符要多得多。空格,换行符,元音等将不成比例地普遍存在。
因此,您可以为各种文件构建字节计数的直方图,并寻找一种简单的方法将它们分类为加密或未加密。例如,查看5个最常见字节值的总计数与5个最常见字节值的总计数之比。我希望加密文件的这个比率接近1.0,而普通文本文件的比例远远超过1.0(我确信有更复杂的统计指标可以使用......)。
当然,对于极短的文档,这可能效果不佳。
另见:
答案 1 :(得分:0)
AES是一种分组密码。就其本身而言,它只能将128位值转换为另一个看似随机的128位值。为了加密更多数据,增加了操作模式和可能的填充方案。如果你想进一步制作加密文件,你真的需要定义一种文件格式,因为前面提到的机制并没有提供这种格式。
因此,如果您说您拥有AES加密文件,除了您的文件以某种方式加密外,它并不意味着什么。
现代加密的结果看起来像随机噪音,因此您可以将加密文件的汉明重量与非压缩结构文件的汉明重量进行比较。 DNA提到的可能会有所不同。压缩文件看起来也像随机噪声,但如果文件足够长,它们可能包含可能足够重要的偏差。
有些文件格式包含数据已加密的标识符how。大多数自制格式都没有任何接近标识符的格式,因为它们是针对特定应用程序编写的,并且协议或文件格式不会经常更改。开发商选择了一些密码套件"并且从不打扰让它变得灵活。如果您知道文件由哪个程序生成,那么您可能会发现它们是否已加密。如果该程序是开源的,这很容易。如果它是闭源的,你仍然可以对它进行逆向工程。