我有一个想要分发的 JAR。我已经签署了这个 jar 文件,我希望 JAR 验证哈希(在清单中找到)是否正确。
我在 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 应用程序。有什么办法可以将这两个 zip 包含在 jar 中,这样我就不需要用户下载 .lib 文件了?