好的,这可能不是最聪明的方式(或者可能是?),但是在检查了PEMWriter的来源之后,这个类基本上是这样做的:
>调用writeObject时,它会创建一个MiscPEMGenerator实例
> MiscPEMGenerator然后通过检查构造函数参数的类型来创建PemObject,以下是MiscPEMGenerator源代码的摘录:
private PemObject createPemObject(Object o){
...
else if (o instanceof PublicKey)
{
type = "PUBLIC KEY";
encoding = ((PublicKey)o).getEncoded();
}
...
return new PemObject(type, encoding);
}
从MiscPEMGenerator代码可以看出,我唯一要改变的是从“RSA PUBLIC KEY”到“PUBLIC KEY”的类型参数.这是最终的代码.
PublicKey publicKey = keyPair.getPublic();
StringWriter writer = new StringWriter();
PemWriter pemWriter = new PemWriter(writer);
pemWriter.writeObject(new PemObject("PUBLIC KEY", publicKey.getEncoded()));
pemWriter.flush();
pemWriter.close();
return writer.toString();