因此,我正在使用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();
    

    10-06 15:24