Reading PEM RSA Public Key Only using Bouncy Castle

前端 未结 6 1778
孤独总比滥情好
孤独总比滥情好 2020-12-24 00:50

I am trying to use C# to read in a .pem file that contains only a RSA public key. I do not have access to the private key information, nor does my application

6条回答
  •  温柔的废话
    2020-12-24 01:01

    In answer to c0d3Junk13, I had the same issue for a PEM private key and it took me all afternoon to find the solution using the C# BouncyCastle Version 1.7 and Visual Studio 2013 Desktop Express. Don't forget to add the project reference to BouncyCastle.Crypto.dll

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Collections;
    using System.IO;
    using Org.BouncyCastle.Asn1.X509;
    using Org.BouncyCastle.Asn1.Pkcs;
    using Org.BouncyCastle.Crypto.Digests;
    using Org.BouncyCastle.Crypto.Parameters;
    using Org.BouncyCastle.Crypto.Signers;
    using Org.BouncyCastle.X509;
    using Org.BouncyCastle.Math;
    using Org.BouncyCastle.Math.EC;
    using Org.BouncyCastle.Utilities.Collections;
    using Org.BouncyCastle.Utilities.Encoders;
    using Org.BouncyCastle.Crypto; 
    using Org.BouncyCastle.Crypto.Engines; 
    using Org.BouncyCastle.OpenSsl;
    
    /* 
        For an Active Directory generated pem, strip out everything in pem file before line:
        "-----BEGIN PRIVATE KEY-----" and re-save.
    */
    string privateKeyFileName = @"C:\CertificateTest\CS\bccrypto-net-1.7-bin\private_key3.pem";
    
    TextReader reader = File.OpenText(privateKeyFileName);
    
    Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters key;
    
    using (reader = File.OpenText(privateKeyFileName))
    {
        key = (Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters)new PemReader(reader).ReadObject();
    }
    
    cipher.Init(false, key);
    
    //Decrypting the input bytes
    
    byte[] decipheredBytes = cipher.ProcessBlock(cipheredBytes, 0, cipheredBytes.Length);
    
    MessageBox.Show(Encoding.UTF8.GetString(decipheredBytes));
    

提交回复
热议问题