0

ユーザーが複数のファイルを暗号化できるJavaアプリケーションを開発しています。128 ビット キーで AES を使用しています。この作業には次の問題があります:-

  1. 実装された AES アルゴリズムは .txt ファイルのみで正常に機能しますが、Office ドキュメントや画像などの他のファイル タイプでは機能しません。私の質問は、AES はすべてのタイプのデータまたはテキスト ファイルのみで機能するのですか? たくさん検索しましたが、見つかったすべての例で .txt ファイルが使用されています。

  2. 現在、ファイルの内容を文字列に読み込んで暗号化し、暗号化された文字列をファイルに書き戻しています。私の質問は、ファイルの内容を読み取らずにファイルを暗号化する方法はありますか?

  3. AES を使用してディレクトリ (フォルダー) とそのすべてのコンテンツを復号化する方法はありますか? 「ディレクトリの復号化」とは、開くことができず、開こうとするとエラーメッセージが表示されることを意味します。

  4. また、暗号化されたファイルは、編集、削除、移動、コピー、および名前の変更が可能です。アプリケーションが暗号化したファイルに対して、誰もこれらのアクションを実行できないようにしたいと考えています。これを行う方法?

以下は私が使用しているコードですが、.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);
         }
}
4

1 に答える 1

1
  1. はい、AES はすべてのデータに対して機能します。

  2. いいえ。

  3. はい。

  4. ディレクトリとコンテンツを圧縮し、Zip ファイルを暗号化します。HMAC を使用して、誰も暗号化されたファイルをいじらないようにします。

あなたは、「このプロジェクトを数日後に提出しなければならないので、できるだけ早く返信してください。これらの問題で非常に困っています。」と言います。これまでに学んだように、最後の最後まで物事を放置することは、良い結果を得る良い方法ではありません: 適切な計画は、パフォーマンスの低下を防ぎます。

もし以前に物事を見ていたなら、問題を解決するのにそれほど時間が残っていなかったでしょう.

于 2012-06-11T16:36:18.387 に答える