读取证书crt文件时,公钥长48bytes

时间:2014-10-17 08:42:03

标签: java encryption public-key-encryption encryption-asymmetric x509

当我从crt证书文件(RSA sig alg:sha256RSA 2048bits)读取公钥时:

        FileInputStream fis = new FileInputStream(PATH_TO_CERTIFICATE_FILE);
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        Certificate cert = (Certificate) cf.generateCertificates(fis).iterator().next();
        RSAPublicKey pk = (RSAPublicKey) cert.getPublicKey();

        byte[] pkValue = pk.getEncoded() 

我将得到结果(pkValue变量)数组,开头有额外的48字节。 为什么这样,我对CertificateFactory的正确理由是否正确?

(目前我的解决方法是从pkValue数组中删除前48个字节。然后使用公钥加密+使用私钥解密工作正常)

1 个答案:

答案 0 :(得分:1)

Java将公钥存储在SubjectPublicKeyInfo结构中。这些结构也存在于证书中。它们是ASN.1 DER编码。

RSA公钥无论如何都包含多个(2)组件:模数和公共指数。模数已经是2048位;它决定了密钥长度。公共指数经常设置为值#34; F4",第四个Fermat,0x010001。这些需要分开以用于通用实现以区分它们。

X509 spec中的更多信息,您可以查看getEncoded返回的字节数组(使用hex或base64)here