尝试获取AsymmetricCipherKeyPair时获取null

时间:2013-11-23 16:42:15

标签: c# bouncycastle

我有这段代码,我在多个地方找到了相同的代码。但是当我使用它时它返回null。

  using Org.BouncyCastle.OpenSsl;
  using Org.BouncyCastle.Crypto;
  using Org.BouncyCastle.Security;  

 string aToBeEncrypted= "asdfghikoksadjfkjsdfjsljfsadjf";
 string pemFilename = @"M:\ConnectivityPackage_meltemi_KeyStore.pem";

 byte[] plaintext = System.Text.Encoding.UTF8.GetBytes(aToBeEncrypted);

 AsymmetricCipherKeyPair keyPair;

 using (var reader = File.OpenText(pemFilename))
    keyPair = (AsymmetricCipherKeyPair)new PemReader(reader).ReadObject();

keyPair是一个空对象。我做错了什么或者pem文件是什么?

1 个答案:

答案 0 :(得分:0)

PemReader的API似乎是纯垃圾。基本上,每次无法解析对象时,它都会返回null,但这并不意味着读取器中没有更多的对象。您必须跟踪自己流的结束。在尝试读取私钥时,以下内容对我有用:

        string pemFile = "...";
        using (var strReader = new StringReader(pemFile))
        {
            var pemReader = new PemReader(strReader);
            while (strReader.Peek() != -1)
            {
                var parameter = pemReader.ReadObject() as RsaPrivateCrtKeyParameters;
                if (parameter != null)
                {
                    // Do something with the found private key
                }
            }
        }