2011-08-23 2 views
0

샘플 코드를 구현하여 해시 및 서명 및 서명 확인을 다음과 같이 수행했습니다. 그러나 서명 확인을 시도 할 때 해당 서명을 확인하지 못하면 서명을 확인할 수 없습니다.VerifyAignature Java in

있습니까 나는 내가 필요로하는 실제 시나리오는 내가, 파일의 해시를 계산 해시에 서명하고 서명을 해독 할, 그래서 내가하는 수 해시를 얻을 수 있습니다

되죠 올바른 절차 호야 다음 원래 해시로 확인해야합니다.

APIS를 사용하고 가능하면 샘플 프로그램을 제안 해주십시오.

public class Temp { 
    public static void main(String args[]) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, SignatureException{ 

     KeyPairGenerator signkeygen = KeyPairGenerator.getInstance("RSA"); 
     signkeygen.initialize(2048);//The argument specifies the length of the key in bits 
     KeyPair signkey = signkeygen.generateKeyPair(); 
     PublicKey sign_publicKey = signkey.getPublic(); 
     PrivateKey sign_privateKey = signkey.getPrivate(); 

     String test = "hai"; 

     Signature mysign = Signature.getInstance("SHA1withRSA"); 
     mysign.update(test.getBytes()); 
     byte[] byteSignedData = mysign.sign(); 
     Signature vSign = Signature.getInstance("SHA1withRSA"); 
     vSign.initVerify(sign_publicKey); 
     vSign.update(byteSignedData); 

     boolean signStatus = vSign.verify(byteSignedData); 
     System.out.println(signStatus); 
     ... 
+0

'Signature'에게'signkey' 또는'sign_privateKey'를 사용하도록 말하지 않습니까? 어떤 열쇠로 서명하고 있습니까? –

답변

2

내가 알 수있는 한 서명 개체를 초기화하여 개인 키로 서명하도록 지정해야합니다. 지금은 공개 키로 확인하고 있지만 비공개로 서명하지 않으면 확인을 시도 할 때 거짓이 표시됩니다.

public class Temp { 
    public static void main(String args[]) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, SignatureException{ 

    KeyPairGenerator signkeygen = KeyPairGenerator.getInstance("RSA"); 
    signkeygen.initialize(2048);//The argument specifies the length of the key in bits 
    KeyPair signkey = signkeygen.generateKeyPair(); 
    PublicKey sign_publicKey = signkey.getPublic(); 
    PrivateKey sign_privateKey = signkey.getPrivate(); 



    Signature mysign = Signature.getInstance("SHA1withRSA"); 
    mysign.initSign(sign_privateKey); //Added this line 
    byte[] byteSignedData = mysign.sign(); 
    Signature vSign = Signature.getInstance("SHA1withRSA"); 
    vSign.initVerify(sign_publicKey); 


    boolean signStatus = vSign.verify(byteSignedData); 
    System.out.println(signStatus); 

이것은 true를 반환합니다. 또한 코드의 어느 부분에 결함이 있는지 알아 내려고 할 때 throw의 모든 예외는 좋지 않습니다. 그들을 붙잡고 각각이 다른 것을 생성하게하십시오. println. 이렇게하면 알고리즘의 어느 부분에 결함이 있는지 알 수 있습니다.