C# 从所选文件夹加载X509证书

C# 从所选文件夹加载X509证书,c#,x509,certificate-store,C#,X509,Certificate Store,从文件夹中加载X509证书 我正在使用c#,我需要从文件夹中加载X509证书。我需要从文件夹中加载文件以显示在加密程序内的表中 public partial class Form1 : Form { DataTable dt = new DataTable(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArg

从文件夹中加载X509证书

我正在使用c#,我需要从文件夹中加载X509证书。我需要从文件夹中加载文件以显示在加密程序内的表中

public partial class Form1 : Form
{
    DataTable dt = new DataTable();
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        var store = new X509Store(StoreName.My, storeLocation: StoreLocation.LocalMachine);
        store.Open(OpenFlags.ReadOnly);

        DataColumn dc1 = new DataColumn("Name", typeof(string));
        DataColumn dc2 = new DataColumn("E-mail", typeof(string));
        DataColumn dc3 = new DataColumn("valid from", typeof(string));
        DataColumn dc4 = new DataColumn("Expiry Date", typeof(string));
        DataColumn dc5 = new DataColumn("ThumbPrint", typeof(string));
        dt.Columns.Add(dc1);
        dt.Columns.Add(dc2);
        dt.Columns.Add(dc3);
        dt.Columns.Add(dc4);
        dt.Columns.Add(dc5);

        foreach (X509Certificate2 mCert in store.Certificates)
        {
            string email1 = mCert.GetNameInfo(X509NameType.SimpleName, false);
            string stringAfterChar = email1.Substring(email1.IndexOf("-") + 1);
            string name = mCert.GetNameInfo(X509NameType.SimpleName, false);
            string[] splitString = name.Split('-');

            string namewithoutemail = splitString[0].Trim();

            dt.Rows.Add(namewithoutemail , stringAfterChar,  mCert.NotBefore, mCert.GetExpirationDateString() , mCert.Thumbprint);
        }

        dataGridView1.DataSource = dt;

    }
这是我的代码,实际上我可以从CertificateStore加载证书,但我想从文件夹加载证书。另外,我可以为我的程序创建一个特殊的证书存储,但我认为这是不可能的。
感谢您的帮助

请查看有关的参考资料。这允许您从文件系统(以及其他方法)加载证书。在这种情况下,您只需循环浏览文件夹中的证书文件,而不是打开CertificateStore

foreach (var file in Directory.GetFiles(yourFolder, "*.cer"))
        {
            var mCert = X509Certificate2.Import(file);

            string email1 = mCert.GetNameInfo(X509NameType.SimpleName, false);
            string stringAfterChar = email1.Substring(email1.IndexOf("-") + 1);
            string name = mCert.GetNameInfo(X509NameType.SimpleName, false);
            string[] splitString = name.Split('-');

            string namewithoutemail = splitString[0].Trim();

            dt.Rows.Add(namewithoutemail , stringAfterChar,  mCert.NotBefore, mCert.GetExpirationDateString() , mCert.Thumbprint);
        }

有点奇怪,但可能符合你的要求。它说了一些关于“其他用户证书”的内容,作为替代方案,有一个X509Certificate2 ctor,它允许证书文件的文件名