如果我知道算法是 AES,有没有办法判断文件是否已经加密?
我本来是加密它的人,所以解密或加密的信息不是问题。但是,如果您尝试解密尚未加密的文件,您将丢失所有数据。如果你加密它两次,你会得到双重加密。您可以反转双重加密,但您需要知道它被加密了两次。
有没有办法以编程方式确定?
我正在用 Java 做这个。
如果我知道算法是 AES,有没有办法判断文件是否已经加密?
我本来是加密它的人,所以解密或加密的信息不是问题。但是,如果您尝试解密尚未加密的文件,您将丢失所有数据。如果你加密它两次,你会得到双重加密。您可以反转双重加密,但您需要知道它被加密了两次。
有没有办法以编程方式确定?
我正在用 Java 做这个。
没有办法判断是否有任何东西已经用 AES 加密,它不会留下签名,这就是重点的一部分。尽管您可以通过测试数据长度(以字节为单位)是否为 16 的倍数来推断其可能已使用 AES 或其他 128 位分组密码进行了加密,这表明在最后一个块上有填充的 128 位分组密码
这取决于未加密的文件格式。如果您的未加密文件具有特定的文件头,您可以搜索该头。如果您找到它,则该文件未加密。如果你没有找到它,文件可能会被加密。
如果您的未加密文件没有特定的文件头......那么运气不好。
如果您愿意使用外部程序,则可以使用 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.