[英]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
的來源之后,這個類基本上是這樣做的:
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();
您可能遇到問題的原因是因為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.