Проверка подписи Jar не работает в Java

У меня был подписанный zip-архив Jar со следующим содержимым:

  • META-INF, каталог, содержащий MANIFEST.MF, SERVER.RSA и SERVER.SF
  • image.bin

После этого я создал измененный файл Jar, добавив несколько символов в image.bin. Я тестировал это с

jarsigner -verify jar.zip

что дало ошибку ошибку

jarsigner: java.lang.SecurityException: SHA1 digest error for image.bin

чего и ожидалось.

Теперь мне нужно программно проверить этот архив Jar zip на Java, и здесь был пример здесь. По сути, он просто открывал файл Jar, перебирал записи и проверял наличие исключения SecuirtyException. Однако это не дало никаких исключений SecurityException. Интересно, чего я могу здесь скучать.


person shva    schedule 05.09.2016    source источник


Ответы (1)


Я прочтите исходный код jarsigner на grepcode, и следующая модификация ответа, похоже, дает мне согласованные результаты:

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

/** @see http://stackoverflow.com/questions/5587656 */
public class Verify {

    public static void main(String[] args) throws IOException {
        System.out.println(verify(new JarFile(args[0])));
    }

    private static boolean verify(JarFile jar) throws IOException {
        Enumeration<JarEntry> entries = jar.entries();
        while (entries.hasMoreElements()) {
            JarEntry entry = entries.nextElement();
            InputStream is = null;
            byte buffer[] = new byte[8192];
            try {
                is = jar.getInputStream(entry);
                int n;
                while ((n = is.read(buffer, 0, buffer.length)) != -1) {
                }
            } catch (SecurityException se) {
                return false;
            } finally {
                if (is != null) {
                    is.close();
                }
            }
        }
        return true;
    }
}

т.е. если вы прочитаете содержимое записи, это вызовет проверку.

person Petesh    schedule 05.09.2016