配布したい 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 に含める方法はありますか?