【问题标题】:How to convert pkcs8 key file to DER format in #C?如何在#C 中将 pkcs8 密钥文件转换为 DER 格式?
【发布时间】:2010-11-13 08:33:55
【问题描述】:

如何将pkcs8密钥文件转换为DER格式,得到Xml格式的私钥和公钥?

使用 openssl 我可以使用: openssl pkcs8 -inform DER -in aaa010101aaa_FIEL.key -out aaa.txt

aaa010101aaa_FIEL.key 是二进制文件

我正在尝试使用 Bouncy Castle 库来实现,但我无法创建新的 EncryptedPrivateKeyInfo(...

在java中有一个帖子可以做到这一点,但我需要它在c#中 How to read a password encrypted key with java?

【问题讨论】:

    标签: c# openssl pkcs#8


    【解决方案1】:

    我找到了答案!

                byte[] dataKey = File.ReadAllBytes(fileName);
    
            Org.BouncyCastle.Crypto.AsymmetricKeyParameter asp =
                Org.BouncyCastle.Security.PrivateKeyFactory.DecryptKey(pass.ToCharArray(), dataKey);
    
            MemoryStream ms = new MemoryStream();
            TextWriter writer = new StreamWriter(ms);
            System.IO.StringWriter stWrite = new System.IO.StringWriter();
            Org.BouncyCastle.OpenSsl.PemWriter pmw = new PemWriter(stWrite);
            pmw.WriteObject(asp);
            stWrite.Close();
            return stWrite.ToString();
    

    How to Load pkcs8 binary file format key

    【讨论】:

    • pass 是字符串(密码),fileName 是 DER 格式的 .key 二进制文件的路径
    【解决方案2】:

    BouncyCastle 文档非常少,我还没有做这件事,但您会想使用 Org.BouncyCastle.OpenSsl.PemReader 将文件读入(可能)Org.BouncyCastle.Asn1.Pkcs.EncryptedPrivateKeyInfo ,像这样:

    using (FileStream FS = File.Open("whatever.key"))
    {
     using (TextReader TR = new StreamReader(FS))
        {
      PR = new Org.BouncyCastle.OpenSsl.PemReader(TR);
      EPKI = (Org.BouncyCastle.Asn1.Pkcs.EncryptedPrivateKeyInfo)PR.ReadObject();
     }
    }
    

    然后 EPKI.GetDerEncoded() 会给你 DER 格式的东西。不能保证这会奏效,但 PemReader 至少应该让您走上正确的轨道。

    【讨论】:

    • 在这段代码中(我将 PR 替换为 var PR,将 EPKI 替换为 var EPKI),PR 返回一个值,但 EPKI 返回 null。没有工作:(
    猜你喜欢
    • 2016-03-01
    • 2015-01-21
    • 2022-07-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2011-07-20
    相关资源
    最近更新 更多