1

时当我看到从CRT证书文件的公钥(RSA签名ALG:sha256RSA 2048bits):额外48bytes公钥48bytes不再阅读证书CRT文件

 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变量)数组在开始。 这是为什么,我的CertificateFactory是否正确?

(对我现在的解决方法是从pkValue数组中删除第一48bytes。然后用公钥解密+用私钥加密正常工作)

+0

请始终发布示例输出 - 至少对于后续问题。始终在SO上包含语言标签。 – 2014-10-17 10:14:37

回答

1

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

无论如何,RSA公钥由多个(2)组件组成:模数和公开指数。模数已经是2048位;它决定了密钥长度。公开指数为,经常为,设置为值“F4”,费马的第四个数字,0x010001。这些需要被分离出来用于通用实现来区分它们。

X509 spec的更多信息,你可以看看你的字节数组返回getEncoded(使用十六进制或base64)here