代码之家  ›  专栏  ›  技术社区  ›  Robben_Ford_Fan_boy

解析X509 DSS证书以获取P、Q、G和Y

  •  1
  • Robben_Ford_Fan_boy  · 技术社区  · 14 年前

    我正在尝试分析包含数字签名算法(dsa)公钥的x509证书。

    使用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
    

    但是,我不确定这是什么格式,如何解析它,以便将它转换成Java中的长BigPixType。

    有人知道怎么转换吗?

    我现在假设它是十六进制的,我正在分析它-但我不能100%确定这是否正确。

    谢谢, 戴夫

    1 回复  |  直到 14 年前
        1
  •  2
  •   Thomas Pornin    14 年前

    你应该 已经 有大整数。对我来说是这样的:

    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位宽。