尝试验证签名,抛出异常:java.io.IOException:序列标记错误

时间:2011-02-16 03:28:16

标签: java cryptography rsa signature

我正在尝试验证邮件的签名,但是我收到了以下异常。

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);

publicKeyJCERSAPublicKey

的一个实例

我在此website上读到此错误是由于证书错过了正确的页眉和页脚标记(即-----BEGIN CERTIFICATE----------END CERTIFICATE-----) 。 然而,我使用证书,而是公钥。查看我的公钥PEM文件,我可以看到它具有公钥的适当标头。

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

1 个答案:

答案 0 :(得分:1)

有点奇怪,因为我认为这会附带Java,但是没有签名算法的服务提供商。我下载了BouncyCastle,在将其添加为提供程序后,代码不再引发异常。