如何解密X509证书签名

时间:2014-02-21 20:58:56

标签: java x509certificate digital-signature

鉴于证书和CA的公钥,我想解密签名部分仅用于验证。 RSA签名解密定义为:H'=s^e mod n其中s是签名。我使用BigInteger作为下面的代码手动完成了这个解密,但它似乎没有问题,因为当我生成证书的SHA1哈希值(使用getTBSCertificate()方法)时,结果看起来并不相同。是否有一个java类(证书+ CA的公钥)并生成解密的签名。

File f= new File("/Users/AA/Desktop/InCommonServerCA"); // path for CA certificate 
CertificateFactory cf = CertificateFactory.getInstance("X.509");
BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
Certificate certCA = cf.generateCertificate(in);

RSAPublicKey pub = (RSAPublicKey) certCA.getPublicKey();
BigInteger n= pub.getModulus(); // to get the CA's modulus (n)
BigInteger e=pub.getPublicExponent(); // to get the CA's exponent (e)
in.close();

// implement `H'=s^e mod n`
BigInteger h1, signature;
signature= new BigInteger(x509cert.getSignature());
h1=signature.modPow(e, n);

1 个答案:

答案 0 :(得分:1)

您只需致电Certificate.verify()。

没有解密数字签名的事情。