2017-04-10 102 views
0

是否有方法根据文件内容来识别或检查AES加密文件(例如,通过在文件开始处查找字母“PK”可以识别ZIP文件的方式)?有没有与AES加密文件关联的幻数?识别AES加密文件

我们在工作流存储库中有多个文件,可以是纯文本(可以是excel,XML,JSON,文本等)或AES-256加密,也不知道哪些是AES加密的。我需要编写Java代码来识别AES加密文件并自动解密它们。谢谢!

+0

它取决于加密文件是否已被加密并以某种标准格式包含。如果不是,您可以轻松识别文本文件或任何其他结构化文件,并假设其他所有内容都是您的加密文件。 – pvg

回答

3

如果没有任何标准头文件,您可以查看字节频率。 AES加密数据(或实际上任何用体面算法加密的东西)看起来都是随机的字节序列。这意味着字节值0-255的分布将近似平坦(即所有字节值具有相同的可能性)。

但是,文本文档将主要包含可打印字符 - 一些比其他更多。空格,换行符,元音等将不成比例地普遍。

因此,您可以为各种文件构建字节计数的直方图,并寻找一种简单的方法将它们分类为加密或非加密。例如,查看5个最不常用字节值的总计数与5个最常用字节值的总计数的比率。我预计这个比例对于一个加密文件来说接近于1.0,而对于一个普通的文本文档(我相信有更复杂的统计指标可以使用...),这个比率远远不是1.0。

当然,这对于极其短的文档可能不太适用。

参见:

0

AES是块密码。就其本身而言,它只能将128位值转换为另一个看似随机的128位值。为了加密更多的数据,添加了操作模式和可能的填充方案。如果你想进一步生成加密文件,你真的需要定义一个文件格式,因为这不是由前面提到的机制提供的。

所以,如果你说你有一个AES加密的文件,除了你的文件被加密以外,并不意味着什么。

现代加密的结果看起来像随机噪声,因此您可以比较加密文件的汉明权重与非压缩结构化文件的汉明权重。提到的DNA可能会有差异。压缩文件看起来像随机噪声,但它们可能包含的偏差可能足够大,如果文件足够长。

某些文件格式包含标准how数据被加密。大多数自制格式没有任何东西接近标识符,因为它们是为特定应用程序编写的,而协议或文件格式不会经常更改。开发人员选择了一些“密码套件”,从不费心使其变得灵活。如果你知道这些文件是由哪个程序生成的,那么你可能会发现它们是否被加密。如果该程序是开源的,这很容易。如果它是封闭源代码,您仍然可以对其进行反向工程。