该文件是否使用AES加密?

时间:2013-02-21 23:13:46

标签: encryption aes

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

我本来就是加密它的人,因此解密或加密的信息不是问题。但是,如果您尝试解密未加密的文件,则会丢失所有数据。如果加密两次,则会获得双重加密。您可以反转双重加密,但您需要知道它已加密两次。

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

我是用Java做的。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

取决于未加密的文件格式。如果未加密的文件具有特定的文件头,则可以搜索该头。如果找到它,则文件未加密。如果找不到,则文件可以加密。

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

答案 2 :(得分: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个字符是盐(前提是加密是盐溶的,openssl二进制文件默认使用,但可以禁用)。

  

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