2016-04-13 14 views
0

自分でチェックしたときにコードfalseが返される理由を理解できません。Signature Verifierが自分自身でチェックするとfalseを返す

import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.NoSuchAlgorithmException; 
import java.security.Signature; 
import java.security.SignatureException; 
import java.security.NoSuchProviderException; 
import java.security.*; 


public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
    KeyPair keyPair; 
    String data = "test"; 

     try { 

      KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA"); 
      keyPairGen.initialize(512); 
      keyPair = keyPairGen.genKeyPair(); 

      Signature sign = Signature.getInstance("SHA1withDSA", "SUN"); 
      sign.initSign(keyPair.getPrivate()); 
      sign.update(data.getBytes()); 

      byte[] encoded = sign.sign(); 

      sign = Signature.getInstance("SHA1withDSA", "SUN"); 
      sign.initVerify(keyPair.getPublic()); 
      sign.update(encoded); 
      System.out.println("Checked: " + sign.verify(encoded)); // Testing with itself returns false???? 

     } catch (NoSuchAlgorithmException ex) { 
      ex.printStackTrace(); 
     } catch (SignatureException ex) { 
      ex.printStackTrace(); 
     } catch (NoSuchProviderException ex) { 
      ex.printStackTrace(); 
     } catch (InvalidKeyException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

プライベート/公開キーに問題がありますか? 私は本当に混乱しています。あなたが間違ったことを更新している

答えて

1

、のPublicKeyを取得した後、この

sign.update(data.getBytes()); 

にこのライン

sign.update(encoded); 

を変更。

+0

神様、私はとても馬鹿だと感じています。ありがとう。 – Franchesco

関連する問題