У меня есть 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.Можно ли как-нибудь включить эти два почтовых индекса в банку, чтобы мне не нужно, чтобы пользователь загружал файл .lib?