6

そのため、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 クラスが Spongy Castle に存在しません。

4

2 に答える 2

10

わかりましたので、これはおそらく最も賢明な方法ではありません (または、おそらくそうでしょうか?) が、PEMWriterこのクラスのソースをチェックアウトした後、基本的に内部でこれを行います。

  1. 呼び出すwriteObjectと、のインスタンスが作成されますMiscPEMGenerator
  2. 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();
于 2014-08-05T02:39:59.580 に答える