你应该
已经
有大整数。对我来说是这样的:
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”参数在正确的dsa公钥中至少应为160位宽。