因此,我正在使用Spongy CaSTLe(Android)为RSA公钥生成PEM编码的字符串,并将其上传到服务器。
这是我目前正在做的:
PublicKey publicKey = keyPair.getPublic();
StringWriter writer = new StringWriter();
PemWriter pemWriter = new PemWriter(writer);
pemWriter.writeObject(new PemObject("RSA PUBLIC KEY", publicKey.getEncoded()));
pemWriter.flush();
pemWriter.close();
return writer.toString();
现在,您可能已经知道,我不确定如何构造
PemObject
或是否有更简单的方法来执行此操作。当使用Bouncy Case时,我曾经这样做过
StringWriter writer = new StringWriter();
PEMWriter pemWriter = new PEMWriter(writer);
pemWriter.writeObject(keyPair.getPublic());
pemWriter.flush();
pemWriter.close();
return writer.toString();
但是由于某种原因,海绵城堡中不存在PEMWriter类
最佳答案
好的,所以这可能不是最聪明的方法(或者也许是?),但是在检查了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();