Попытка проверить подпись, Возникло исключение: java.io.IOException: Ошибка тега последовательности - PullRequest
0 голосов
/ 16 февраля 2011

Я пытаюсь проверить подпись сообщения, но я получаю следующее исключение:

Exception in thread "main" java.security.SignatureException: Signature encoding error
    at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:185)
    at java.security.Signature$Delegate.engineVerify(Signature.java:1140)
    at java.security.Signature.verify(Signature.java:592)
    ... 4 more
Caused by: java.io.IOException: Sequence tag error
    at sun.security.util.DerInputStream.getSequence(DerInputStream.java:280)
    at sun.security.rsa.RSASignature.decodeSignature(RSASignature.java:209)
    at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:174)
    ... 6 more

Вот мой код Java

Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(publicKey);
sig.update(message);
return sig.verify(signature);

publicKey является экземпляром JCERSAPublicKey

Я прочитал на этом веб-сайте , что эта ошибка вызвана сертификатом , в котором отсутствуют правильные теги верхнего и нижнего колонтитула (т.е. -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----). Однако , я не использую сертификат, а открытый ключ . Глядя на мой файл PEM с открытым ключом, я вижу, что в нем есть соответствующие заголовки для открытого ключа.

-----BEGIN PUBLIC KEY-----
...STUFF
...STUFF
...STUFF
...STUFF
...STUFF
...STUFF
-----END PUBLIC KEY-----

1 Ответ

1 голос
/ 16 февраля 2011

Немного странно, потому что я думал, что это будет поставляться с Java, но не было поставщика услуг для алгоритма подписи.Я скачал BouncyCastle и после добавления его в качестве провайдера код больше не вызывает исключение.

...