1

配布したい JAR があります。私はこの jar ファイルに署名しました。JAR でハッシュ (マニフェストにある) が正しいことを確認したいと思います。

JarFile のハッシュを検証する efreedom のコードを見つけました (リンクを投稿できませんが、コードは verify_Jar_Integrity 関数の下にあります)。このコードは機能しているようです。現在の JAR のパスを見つけて検証を試みる次のように記述しました (プラットフォームに依存しないことはわかっていますが、現在動作させようとしているところです)。FileNotFoundException: C:\Users...\dist (アクセスが拒否されました) が発生します。この例外は、Javaがディレクトリを「開こう」としていて、ファイルしか開けないためだと思いますが、修正方法がわかりません。

public JarFile get_Path() {
   String jarpath = this.getClass().getResource("/" + this.getClass().getName().replace('.', '/') + ".class").toString();
   int first = jarpath.indexOf("C:");
   int last = jarpath.lastIndexOf(".jar") + 4;
   jarpath = jarpath.substring(first, last);
   System.out.println("Jar Folder: " + jarpath);
   new Popup(jarpath);
   JarFile jar = new JarFile(jarpath);
   return jar;
}

private static boolean verify_Jar_Integrity(JarFile jar) throws IOException {
   System.out.println("verify_Jar_Integrity Path: " + jar.getName());
   Enumeration<JarEntry> entries = jar.entries();
   while (entries.hasMoreElements()) {
      JarEntry entry = entries.nextElement();
      try {
         InputStream is = jar.getInputStream(entry);
      } catch (SecurityException se) {
         return false;
      }
   }
   return true;
}

public static void main(String[] args) {
   try {
      System.out.println(verify_Jar_Integrity(get_Path()));
   } catch (Exception e) {
      System.out.println("Error: " + e);
   }
}

さらに、コードの別の場所で BouncyCastle を使用しましたが、これには cldc_classes.zip と cldc_crypto.zip が必要です。単一のスタンドアロン JAR アプリケーションが必要です。ユーザーが .lib ファイルをダウンロードする必要がないように、これら 2 つの zip を jar に含める方法はありますか?

4

0 に答える 0