我正在尝试使用以下代码从pem文件中获取密钥:
protected boolean configureKey() {
try {
Security.addProvider(new BouncyCastleProvider());
PEMParser reader = new PEMParser(new InputStreamReader(getAssets().open(PUBLIC_KEY_FILE)));
Object obj;
PublicKey publicKey = null;
while (((obj = reader.readObject()) != null) && (publicKey == null)) {
if (obj instanceof SubjectPublicKeyInfo) {
JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
publicKey = converter.getPublicKey((SubjectPublicKeyInfo) obj);
} else {
if (obj instanceof PublicKey) {
publicKey = (PublicKey) obj;
}
}
}
if (publicKey != null) {
return true;
}
return false;
} catch (IOException e) {
return false;
}
}
此代码之前已经起作用,但是这次失败了,因为该对象不是SubjectPublicKeyInfo或PublicKey的实例,而是X509CertificateHolder。
请牢记这一点,我确定问题出在这个特定的pem文件中(因为此代码在读取密钥之前已经起作用),但是我无法弄清楚为什么该对象是该类的实例。它应该具有其他格式或结构吗?我需要在文件中进行哪些更改以获取SubjectPublicKeyInfo实例?