ユーザーが複数のファイルを暗号化できるJavaアプリケーションを開発しています。128 ビット キーで AES を使用しています。この作業には次の問題があります:-
実装された AES アルゴリズムは .txt ファイルのみで正常に機能しますが、Office ドキュメントや画像などの他のファイル タイプでは機能しません。私の質問は、AES はすべてのタイプのデータまたはテキスト ファイルのみで機能するのですか? たくさん検索しましたが、見つかったすべての例で .txt ファイルが使用されています。
現在、ファイルの内容を文字列に読み込んで暗号化し、暗号化された文字列をファイルに書き戻しています。私の質問は、ファイルの内容を読み取らずにファイルを暗号化する方法はありますか?
AES を使用してディレクトリ (フォルダー) とそのすべてのコンテンツを復号化する方法はありますか? 「ディレクトリの復号化」とは、開くことができず、開こうとするとエラーメッセージが表示されることを意味します。
また、暗号化されたファイルは、編集、削除、移動、コピー、および名前の変更が可能です。アプリケーションが暗号化したファイルに対して、誰もこれらのアクションを実行できないようにしたいと考えています。これを行う方法?
以下は私が使用しているコードですが、.txt ファイルに対してのみ機能し、他のファイルに対しては機能しません。何が問題なのかわからない:
import java.io.File;
import java.io.FileInputStream;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class JavaCrypt
{
public static void main(String[] args) throws Exception {
File f=new File("D:/a.txt");
int ch;
StringBuffer strContent = new StringBuffer("");
FileInputStream fin = null;
try {
fin = new FileInputStream(f);
while ((ch = fin.read()) != -1)
strContent.append((char) ch);
fin.close();
}
catch (Exception e) {
System.out.println(e);
}
System.out.println("Original string: " +strContent.toString()+"\n");
// Get the KeyGenerator
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128); // 192 and 256 bits may not be available
// Generate the secret key specs.
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
// Instantiate the cipher
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(strContent.toString().getBytes());
System.out.println("encrypted string: " + encrypted.toString());
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] original =cipher.doFinal(encrypted);
String originalString = new String(original);
System.out.println("Original string: " +originalString);
}
}