アルゴリズムがAESであることがわかっている場合、ファイルがすでに暗号化されているかどうかを確認する方法はありますか?
暗号化するのは私だったので、復号化や暗号化する情報は問題ありません。ただし、暗号化されていないファイルを復号化しようとすると、すべてのデータが失われます。2回暗号化すると、2回暗号化されます。二重暗号化を逆にすることはできますが、2回暗号化されていることを知っておく必要があります。
プログラムで決定する方法はありますか?
私はこれをJavaで行っています。
アルゴリズムがAESであることがわかっている場合、ファイルがすでに暗号化されているかどうかを確認する方法はありますか?
暗号化するのは私だったので、復号化や暗号化する情報は問題ありません。ただし、暗号化されていないファイルを復号化しようとすると、すべてのデータが失われます。2回暗号化すると、2回暗号化されます。二重暗号化を逆にすることはできますが、2回暗号化されていることを知っておく必要があります。
プログラムで決定する方法はありますか?
私はこれを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 文字がソルトであることを確認することです (暗号化がソルト化されている場合、openssl バイナリはデフォルトで実行されますが、無効にすることができます)。
0000000: 5361 6c74 6564 5f5f 70d6 3655 ae12 58de Salted__p.6U..X.