2013-02-21 142 views
0

如果我知道算法是AES,有沒有辦法告訴文件是否已經被加密?用AES加密的文件?

我會一直一個進行加密,這樣信息解密或加密是沒有問題的。但是,如果您嘗試解密未加密的文件,則會丟失所有數據。如果你加密兩次,你會得到一個雙重加密。您可以反轉雙重加密,但您需要知道它已加密兩次。

有沒有一種方法來確定編程?

我在Java中這樣做。

+0

你知道它的加密,因爲它不匹配原始。 – 2013-02-21 23:17:45

+0

如果您試圖解密數據,爲什麼會丟失數據? – Eric 2013-02-21 23:18:00

+0

安全領域已經有了一些很好的信息; http://security.stackexchange.com/questions/3989/how-to-determine-what-type-of-encoding-encryption-has-been-used – Steve101 2013-02-21 23:19:16

回答

2

也沒有辦法,如果任何已與AES加密告訴,它不留下一個簽名,這就是該點的一部分。雖然可以通過測試,如果在字節中的數據的長度是16的倍數,這表明具有填充一個128位塊密碼的最後一個塊

+0

我不能說我很失望,它不會留下痕跡。 – SyntaxRules 2013-02-21 23:28:17

1

這取決於推斷其可能已經被加密,AES或一些其它的128位塊密碼以未加密的文件格式。如果未加密的文件具有特定的文件頭,則可以搜索該頭。如果找到它,則該文件未加密。如果你沒有找到它,該文件可能會被加密。

如果您未加密的文件不具有特定的文件頭......那麼倒黴。

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。