验证正在运行的JAR

时间:2011-08-21 00:09:28

标签: jar bouncycastle verify

我有一个我想分发的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文件了吗?

0 个答案:

没有答案