자바

2016-09-05 1 views
0

에서 작동하지 않습니다 항아리 서명을 확인 내가 가지고 다음과 같은 내용을 포함하는 서명 항아리 우편 :자바

  • META-INF, MANIFEST.MF, SERVER.RSA를 포함하는 디렉토리 및 SERVER.SF
  • image.bin

그 후 image.bin에 몇 개의 문자를 추가하여 변조 된 Jar 파일을 만들었습니다. 나는 오류 예상

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

에게 오류 준

jarsigner -verify jar.zip 

와 함께 테스트했다.

이제 Java에서 프로그래밍 방식으로이 Jar Zip을 확인해야하며 예제는 here입니다. 기본적으로 Jar 파일을 열어 항목을 반복하고 SecuirtyException을 확인했습니다. 그러나 SecurityException을 제공하지는 않습니다. 나는 여기서 무엇을 놓칠 지 궁금하다.

grepcode에

답변

2

나는 read the source of jarsigner과 대답의 다음과 같은 수정은 나에게 일관된 결과를 제공하는 것 : 당신이 항목의 내용을 읽을 경우

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; 
    } 
} 

즉이 검사를 트리거합니다.