我有一个我想分发的JAR。我已经签署了这个jar文件,我希望JAR能够验证散列(在Manifest中找到)是否正确。
我在efreedom上找到了验证JarFile哈希值的代码(不能发布链接,但代码在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应用程序。有什么方法可以在jar中包含这两个拉链,这样我就不需要用户下载.lib文件了吗?