如何在JAVA中计算与windows计算的公钥相匹配的证书公钥

如何在JAVA中计算与windows计算的公钥相匹配的证书公钥,java,certificate,Java,Certificate,例如,我计算了以下证书的公钥(PEM格式) java API计算的公钥的十六进制表示形式为 30819F300D06092A864886F70D010101050003818D0030818902818100AA346575F8C5808A8CAD788D70A600DF56D7FA72ECC374409E0625AA80E1 DECCCFF824EDDCFE722D9BFA09E8B144A08F4B5DE72A2586608A3EAF585EE6AFD82E6FB5A589AF8554DD4

例如,我计算了以下证书的公钥(PEM格式)

java API计算的公钥的十六进制表示形式为 30819F300D06092A864886F70D010101050003818D0030818902818100AA346575F8C5808A8CAD788D70A600DF56D7FA72ECC374409E0625AA80E1 DECCCFF824EDDCFE722D9BFA09E8B144A08F4B5DE72A2586608A3EAF585EE6AFD82E6FB5A589AF8554DD4C22E2D39C688E3527D7ACA934B1002614F50727BFA0017901

另一方面,窗口显示的公钥的十六进制表示形式(当我们双击证书时,公钥的值出现在“详细信息”选项卡中)如下所示 30818902818100AA346575F8C5808A8CAD788D70A600DF56D7FA72ECC374409E0625AADE80E1DECFF824EDDF722D1B9BFA09E8B144A08F4B5DE72A2586608A3EAF5865EE6AFD82E6F6FB1B53A589AF8554DD4C22E2E33D9C688E3523C7D7ACA934B5BA10102614F50718B27E1CD6FF56AC19EBA481EE632BF29B9CC203001

因此,JavaAPI和windows计算的公钥是不同的。我观察到的是,窗口显示的公钥与JavaAPI计算公钥中第45个字符的值相同


因此,请帮助我们理解window如何计算证书的公钥,以便我们可以使用相同的机制。

有关详细答案,请参阅下面的帖子

这是因为windows剥离并在java中提供了额外的元数据

In our project we need to calculate the public key of a certificate and sha1 hash of public key. I tried to do this using java API "X509Certificate.getPublicKey()" and then calculated the hexadecimal representation of it. But the value obtained through this process does not match with the value that windows shows for "Public Key" when certificate is opened by double clicking it.
-----BEGIN CERTIFICATE-----
MIICxDCCAi2gAwIBAgIBBjANBgkqhkiG9w0BAQQFADCBujELMAkGA1UEBhMCSU4x
EDAOBgNVBAgMB0hhcnlhbmExEDAOBgNVBAcMB0d1cmdhb24xDzANBgNVBAoMBk1j
QWZlZTEbMBkGA1UECwwSQXBwbGljYXRpb25Db250cm9sMTIwMAYDVQQDDClNY0Fm
ZWVBcHBsaWNhdGlvbkNvbnRyb2xUZXN0Q2VydEF1dGhvcml0eTElMCMGCSqGSIb3
DQEJARYWYXBwX2NvbnRyb2xAbWNhZmVlLmNvbTAeFw0xMjAzMTMxMDM4MDZaFw0x
MzA3MjYxMDM4MDZaMIGUMQswCQYDVQQGEwJJTjEQMA4GA1UECBMHSGFyeWFuYTEQ
MA4GA1UEBxMHR3VyZ2FvbjEUMBIGA1UEChMLdGVzdENvbXBhbnkxEDAOBgNVBAsT
B3Rlc3RPcmcxETAPBgNVBAMTCHRlc3ROYW1lMSYwJAYJKoZIhvcNAQkBFhd0ZXN0
TmFtZUB0ZXN0RG9tYWluLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
qjRldfjFgIqMrXiNcKYA31bX+nLsw3Q0CeBiWq3oDh3sz/gk7dz+9yLRub+gnosU
Sgj0td5yolhmCKPq9YZe5q/YLm9vsbU6WJr4VU3Uwi4uHTPZxojjUjx9esqTS1uh
AQJhT1BxOLJ+HNb/VqwZ66SB7mPhK2BTT7Kym5zCApsCAwEAATANBgkqhkiG9w0B
AQQFAAOBgQB7yiAwtYiB05lJf+kUCgOmfUx/18ZJPB1Am+fIr+aMo2Djgv7bLPG5
vesq0t1opBJIS9LqswW8Bf3IGdhc+33+LYRVxUB8mLHZ2KyCqfuuT7PdHHsiyNDg
uMdO+equDFUsTMv0y6KyzCf89ZPjGhS4O09zVyR/KtZzSE6dyvyBNg==
-----END CERTIFICATE-----