문제

2011-04-13 5 views
1

내가 다음 코드를 실행 jar 파일의 코드를 사용하는 경우 :문제

public class Sign { 

private static final PrivateKey   priv = Util.loadPrivate(); 
private static final PublicKey   pub  = Util.loadPublic(); 
private static final HexBinaryAdapter adp  = new HexBinaryAdapter(); 

public static String sign(String in) { 
    try { 
     Signature sign = Signature.getInstance(Util.ALG); 
     sign.initSign(priv); 
     sign.update(in.getBytes()); 
     return adp.marshal(sign.sign()); 

    } catch (Exception e) {e.printStackTrace();} 
    return null; 
} 

public static boolean verify(String data, String sign) { 
    try { 
     Signature verify = Signature.getInstance(Util.ALG); 
     verify.initVerify(pub); 
     verify.update(data.getBytes()); 
     return verify.verify(adp.unmarshal(sign)); 
    } catch (Exception e) {e.printStackTrace();} 
    return false; 
} 

}

및 주요 기능을 다음과 같습니다 : I 실행할 때

public static void main(String[] args) { 
    String in = "lala"; 
    String sign = Sign.sign(in); 
    System.out.println(sign); 
    System.out.println(Sign.verify(in, sign)); 
} 

모든 것이 잘 진행 그것은 Eclipse 내에서 (출력은 "true"입니다.)하지만, jar (main 함수없이)에 포장하고 실행하면 출력이 false입니다. 내가 확인하고 키를 로딩하는 것은 잘 작동

public static PrivateKey loadPrivate() { 
    try { 
     URLConnection con = Util.class.getResource("private.key").openConnection(); 
     byte[] bs = new byte[con.getContentLength()]; 
     con.getInputStream().read(bs); 
     return KeyFactory.getInstance(ALG).generatePrivate(new PKCS8EncodedKeySpec(bs)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

public static PublicKey loadPublic() { 
    try { 
     URLConnection con = Util.class.getResource("public.key").openConnection(); 
     byte[] bs = new byte[con.getContentLength()]; 
     con.getInputStream().read(bs); 
     return KeyFactory.getInstance(ALG).generatePublic(new X509EncodedKeySpec(bs)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

: 이것은 내가 열쇠를로드하는 방법입니다

.

아이디어가 있으십니까?

+0

나는 문제를 느끼는 것은 클래스 경로입니다 있습니다. main 함수를 실행하는 데 사용하는 인수는 무엇입니까? –

+0

'java' 명령에 대한 인수, 특히 클래스 경로 설정을 보여주십시오. 파일은 클래스 경로에 있어야 찾아 낼 수 있습니다. 이클립스는 보통 당신을 위해 (BuildPath) 그것을 처리하지만 커맨드 라인에서는 자신의 차례입니다. – Thomas

답변

0

그냥 다음과 같이 실행합니다

java Main -classpath=/path/to/libraryk.jar 
+0

Main.class ??? 그것은 작동하지 않습니다. 이 매개 변수는 파일 이름이 아닌 클래스의 표준 이름이어야합니다. –

+0

그런 다음 .class를 삭제하면 모든 사람들이 행복합니다. :) –