java.security.Signature, объект не инициализирован для подписания - PullRequest
1 голос
/ 14 февраля 2012

Я сделал инициализацию для подписания, вызвав метод initSign (Закрытый ключ), но я все еще получаю исключение.Вот мой код.

public static boolean verify() throws SignatureException{
    File signed = new File("/Users/main/Documents/workspace/test/src/lorem_ipsum.txt");

    byte[] b = new byte[(int) signed.length()];
    try {
      FileInputStream fileInputStream = new FileInputStream(signed);
      System.out.println("Before read b is: "+ b);
      fileInputStream.read(b);
      for (int i = 0; i < b.length; i++) {
        //System.out.print((char)b[i]);
      }
    } catch (FileNotFoundException e) {
      //System.out.println("File Not Found.");
      e.printStackTrace();
    }
    catch (IOException e1)
    {
      //System.out.println("Error Reading The File.");
      e1.printStackTrace();
    }

    KeyPairGenerator kpg = null;
    try {
      kpg = KeyPairGenerator.getInstance("RSA");
    } catch (NoSuchAlgorithmException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    kpg.initialize(2048);
    KeyPair kp = kpg.genKeyPair();
    PublicKey publicKey = (PublicKey) kp.getPublic();
    PrivateKey privateKey = (PrivateKey) kp.getPrivate();

    Signature sign = null;
    try {
      sign = Signature.getInstance("SHA1withRSA");
    } catch (NoSuchAlgorithmException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
    try {
      sign.initSign((PrivateKey) privateKey);
    } catch (InvalidKeyException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    try {
      sign.initVerify((PublicKey)publicKey);
    } catch (InvalidKeyException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    try {
      sign.update(b);
    } catch (SignatureException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    byte[] signed2 = sign.sign();
    return sign.verify(signed2);

  }  

Вот мое исключение:

Exception in thread "main" java.security.SignatureException: object not initialized for signing
    at java.security.Signature.sign(Signature.java:524)
    at test.verify(test.java:114)
    at test.main(test.java:215)

Кто-нибудь поможет?Спасибо!

1 Ответ

3 голосов
/ 15 февраля 2012

Не используйте одну и ту же переменную 'sign' для подписи и проверки.sign.initVerify переопределяет sign.initSign.Скорее используйте одну переменную для подписи и другую для проверки.

...