fer*_*hur 5 java android bouncycastle spongycastle
因此,我使用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();
Run Code Online (Sandbox Code Playgroud)
现在,你可能会告诉我,我不知道如何构建PemObject或如果有更简单的方法来做到这一点.
当使用Bouncy Case时,我曾经这样做过
StringWriter writer = new StringWriter();
PEMWriter pemWriter = new PEMWriter(writer);
pemWriter.writeObject(keyPair.getPublic());
pemWriter.flush();
pemWriter.close();
return writer.toString();
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,PongWriter类在Spongy Castle中不存在
好的,这可能不是最聪明的方式(或者可能是?),但是在检查完PEMWriter这个类的来源后,基本上就是这样做了:
writeObject它时会创建一个实例MiscPEMGeneratorMiscPEMGenerator然后PemObject通过检查构造函数的参数的类型来创建,以下是MiscPEMGenerator源代码的摘录:
private PemObject createPemObject(Object o){
...
else if (o instanceof PublicKey)
{
type = "PUBLIC KEY";
encoding = ((PublicKey)o).getEncoded();
}
...
return new PemObject(type, encoding);
}
Run Code Online (Sandbox Code Playgroud)从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();
Run Code Online (Sandbox Code Playgroud)
您可能遇到问题的原因是 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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7466 次 |
| 最近记录: |