0

如果我知道算法是 AES,有没有办法判断文件是否已经加密?

我本来是加密它的人,所以解密或加密的信息不是问题。但是,如果您尝试解密尚未加密的文件,您将丢失所有数据。如果你加密它两次,你会得到双重加密。您可以反转双重加密,但您需要知道它被加密了两次。

有没有办法以编程方式确定?

我正在用 Java 做这个。

4

3 回答 3

2

没有办法判断是否有任何东西已经用 AES 加密,它不会留下签名,这就是重点的一部分。尽管您可以通过测试数据长度(以字节为单位)是否为 16 的倍数来推断其可能已使用 AES 或其他 128 位分组密码进行了加密,这表明在最后一个块上有填充的 128 位分组密码

于 2013-02-21T23:19:11.960 回答
1

这取决于未加密的文件格式。如果您的未加密文件具有特定的文件头,您可以搜索该头。如果您找到它,则该文件未加密。如果你没有找到它,文件可能会被加密。

如果您的未加密文件没有特定的文件头......那么运气不好。

于 2013-02-21T23:22:13.850 回答
1

如果您愿意使用外部程序,则可以使用 openssl 尝试解密数据。只要您在未加密的数据上提供非空白密码,它就会返回“坏幻数”错误。尚不确定 openssl 究竟是如何生成该消息的(如果我可以在您的代码中做到这一点),但这是一个开始。

$ openssl enc -d -aes-256-cbc -in /Applications/Wireshark.app/Contents/MacOS/Wireshark
enter aes-256-cbc decryption password:
bad magic number

另一种方法是检查文件的前 8 个字符是“Salted__”,接下来的 8 个字符是 salt(假设加密是 salted,openssl 二进制文件默认执行但可以禁用)。

0000000: 5361 6c74 6564 5f5f 70d6 3655 ae12 58de Salted__p.6U..X.

于 2013-02-21T23:34:36.047 回答