簡體   English   中英

使用java將RSA公鑰導出到PEM String

[英]Export RSA public key to PEM String using java

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

但由於某些原因,PongWriter類在Spongy Castle中不存在

好的,這可能不是最聰明的方式(或者可能是?),但是在檢查了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();

您可能遇到問題的原因是因為Android在內部使用Bouncy Castle作為JCA提供商。 但是包含的版本因各種Android版本而異。

您可能對Spongy Castle項目感興趣,該項目“簡單地”將Bouncy Castle重新打包到另一個包中,以便您可以在Android應用程序中包含自己的庫。

使用Spongy Castle的最新版本(1.51.0.0),以下工作正常(在我的工作站上,沒有設備可以在設備上進行測試):

import java.security.PublicKey;
import org.spongycastle.openssl.jcajce.JcaPEMWriter;

class PEMConverter {

    public static String toPEM(PublicKey pubKey) {
        StringWriter sw = new StringWriter();
        JcaPEMWriter pemWriter = new JcaPEMWriter(sw);
        pemWriter.writeObject(pubKey);
        pemWriter.close();
        return sw.toString();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM