我正在尝试验证邮件的签名,但是我收到了以下异常。
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
我在此website上读到此错误是由于证书错过了正确的页眉和页脚标记(即-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
) 。 然而,我不使用证书,而是公钥。查看我的公钥PEM文件,我可以看到它具有公钥的适当标头。
-----BEGIN PUBLIC KEY-----
...STUFF
...STUFF
...STUFF
...STUFF
...STUFF
...STUFF
-----END PUBLIC KEY-----
答案 0 :(得分:1)
有点奇怪,因为我认为这会附带Java,但是没有签名算法的服务提供商。我下载了BouncyCastle,在将其添加为提供程序后,代码不再引发异常。