解析X509 DSS证书拿到P,Q,G和Y
-
23-09-2019 - |
题
我试图解析X509证书包含一个数字签名算法(DSA)公共密钥。
使用javax.security.cert.X509Certificate类和的getpublickey()方法我已经能够获得P,Q,G和Y:
P: 0279b05d bd36b49a 6c6bfb2d 2e43da26 052ee59d f7b5ff38 f8288907 2f2a5d8e 2acad76e ec8c343e eb96edee 11
Q: 036de1
G: 03
Y: 02790a25 22838207 4fa06715 1def9df5 474b5d84 a28b2b9b 360a7fc9 086fb2c6 9aab148f e8372ab8 66705884 6d
不过,我不知道什么格式,这是如何解析它把它转换为长\ BigInteger的Java编写的。
没有任何人知道如何做到这一点的转换?
我目前假设它是十六进制和我解析它作为如此 - 但我不是100%肯定,如果这是正确的。
谢谢, 戴夫
解决方案
您应该的已的有大的整数。这是怎么一回事呢我:
X509Certificate xc = X509Certificate.getInstance(ecert);
PublicKey pkey = xc.getPublicKey();
DSAPublicKey dk = (DSAPublicKey)pkey;
DSAParams pp = dk.getParams();
System.out.printf("p = 0x%X\n", pp.getP());
System.out.printf("q = 0x%X\n", pp.getQ());
System.out.printf("g = 0x%X\n", pp.getG());
System.out.printf("y = 0x%X\n", dk.getY());
假设编码证书是在ecert
。接口DSAPublicKey
和DSAParams
在java.security.interfaces
。
您也可以经过一个KeyFactory
并使用getKeySpec()
方法导出公钥作为DSAPublicKeySpec
,这将提供相同的值BigInteger
实例。我不知道是否有增益要经过这条道路,虽然。
什么告诉你可能是某种编码的,但我很茫然地知道哪一个。无论如何,“Q”参数应至少为160位宽在一个适当的DSA公钥。
不隶属于 StackOverflow