내가 다음 코드를 실행 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;
}
}
: 이것은 내가 열쇠를로드하는 방법입니다
.
아이디어가 있으십니까?
나는 문제를 느끼는 것은 클래스 경로입니다 있습니다. main 함수를 실행하는 데 사용하는 인수는 무엇입니까? –
'java' 명령에 대한 인수, 특히 클래스 경로 설정을 보여주십시오. 파일은 클래스 경로에 있어야 찾아 낼 수 있습니다. 이클립스는 보통 당신을 위해 (BuildPath) 그것을 처리하지만 커맨드 라인에서는 자신의 차례입니다. – Thomas