Java 通过bouncy castle库将der转换为pem

Java 通过bouncy castle库将der转换为pem,java,cryptography,bouncycastle,x509,Java,Cryptography,Bouncycastle,X509,我找到了很多关于从pem到der转换的答案 然而,我无法找到将der转换为pem的方法 例如,以下代码生成der编码的文件pkcs10.cer 像, [0]版本:3 序列号:1353995641265 颁发者N:CN=测试证书 开始日期:2012年11月26日星期一21:54:01太平洋标准时间 最终日期:2012年11月26日星期一21:54:51太平洋标准时间 但是,我不知道如何从der文件进行pem编码的认证。我不是Java开发人员,因此我无法向您展示代码或指向类。PEM只是二进制DER的

我找到了很多关于从pem到der转换的答案

然而,我无法找到将der转换为pem的方法

例如,以下代码生成der编码的文件pkcs10.cer

像, [0]版本:3 序列号:1353995641265 颁发者N:CN=测试证书 开始日期:2012年11月26日星期一21:54:01太平洋标准时间 最终日期:2012年11月26日星期一21:54:51太平洋标准时间


但是,我不知道如何从der文件进行pem编码的认证。

我不是Java开发人员,因此我无法向您展示代码或指向类。PEM只是二进制DER的Base64编码,带有一个标准头和尾部。

下面是一个将各种BC对象转换为PEM字符串序列化格式的方法。注意:这段代码是为BC的C版本编写的,但是应该不费吹灰之力就翻译成Java版本

// converts bouncy castle objects of type
// X509Certificate, X509Crl, AsymmetricCipherKeyPair, AsymmetricKeyParameter,
// IX509AttributeCertificate, Pkcs10CertificationRequest, Asn1.Cms.ContentInfo 
// to PEM format string
public string ToPem(object obj)
{
    using (MemoryStream mem = new MemoryStream())
    {
        StreamWriter writer = new StreamWriter(mem);
        Org.BouncyCastle.OpenSsl.PemWriter pem = new Org.BouncyCastle.OpenSsl.PemWriter(writer);
        pem.WriteObject(obj);
        // force the pem write to flush it's data - kind of abnoxious you have to do that
        pem.Writer.Flush();
        // create a stream reader to read the data.
        StreamReader reader = new StreamReader(mem);
        mem.Position = 0;
        string pemStr = reader.ReadToEnd();
        return pemStr;
    }
}

我的道歉@owlstead。我当时在手机上,仍然不能很好地打字。只是为了老斯库尔。是的,我知道那种感觉。也许回家后再编辑,或者稍后再输入。我可以在我的键盘上打得比较好,但我仍然没有找到如何快速内联代码,因为屏幕键盘上完全没有正确的字符。当然,在发布之前需要重新阅读和修改。这个问题看起来很混乱。如果您从给定的示例中完全删除fwO内容,那么基本上会留下以PEM格式向系统写入X509证书的代码。fwO部件没有生成DER,因为您需要调用getEncoded而不是toString。
// converts bouncy castle objects of type
// X509Certificate, X509Crl, AsymmetricCipherKeyPair, AsymmetricKeyParameter,
// IX509AttributeCertificate, Pkcs10CertificationRequest, Asn1.Cms.ContentInfo 
// to PEM format string
public string ToPem(object obj)
{
    using (MemoryStream mem = new MemoryStream())
    {
        StreamWriter writer = new StreamWriter(mem);
        Org.BouncyCastle.OpenSsl.PemWriter pem = new Org.BouncyCastle.OpenSsl.PemWriter(writer);
        pem.WriteObject(obj);
        // force the pem write to flush it's data - kind of abnoxious you have to do that
        pem.Writer.Flush();
        // create a stream reader to read the data.
        StreamReader reader = new StreamReader(mem);
        mem.Position = 0;
        string pemStr = reader.ReadToEnd();
        return pemStr;
    }
}