0

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

但是,我找不到将der转换为pem的方法。

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

public static void main(String[] args) throws Exception
{
    X509Certificate[] chain = buildChain();
    PEMWriter pemWrt = new PEMWriter(new OutputStreamWriter(System.out));
    pemWrt.writeObject(chain[0]);

    FileWriter fwO = new FileWriter("pkcs10.cer");
    fwO.write((chain[0]).toString());

    fwO.close();
    pemWrt.close();

}

喜欢,[0] 版本:3 序列号:1353995641265 颁发者DN:CN=测试证书开始日期:2012 年 11 月 26 日星期一 21:54:01 PST 最终日期:2012 年 11 月 26 日星期一 21:54:51 PST

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

4

2 回答 2

8

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

于 2012-11-26T13:19:34.433 回答
1

下面是将各种 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;
    }
}
于 2013-02-12T15:11:06.127 回答