如何使用密码保护 rsacryptoserviceprovider 私钥并将其添加到 Windows 商店中

问题描述

我有一个公钥证书和一个私钥。在添加到 x509store 之前,我想用密码保护私钥。

我的要求是,当我使用主题名称从商店中找到 x509certificate2 时,我应该使用私钥获取证书。但私钥应该受密码保护,没有任何 ui 提示。

在创建 rsacryptoservice provider 时,我尝试将密钥密码附加到 csp 参数,我可以创建 rsacryptoserviceprovider 对象。我已将其附加到 x509certificate2 并添加到 Windows 商店。但是从存储私钥检索后抛出加密异常。

enter image description here

var cspParams = new CspParameters
{
    ProviderType = 1,Flags = CspProviderFlags.UseMachineKeyStore
};

string passphrase = "password";
char[] passPhrase = passphrase.ToCharArray();
SecureString keyPassword = new SecureString();

for (int i = 0; i < passPhrase.Length; i++)
{
    keyPassword.AppendChar(passPhrase[i]);
}

cspParams.KeyPassword = keyPassword;
using (RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParams))
{
    rsaProvider.ImportParameters(rsaParam);
    rsaProvider.PersistKeyInCsp = true;
    X509Certificate2 x509Certificate = new X509Certificate2(Convert.FromBase64String(cryptoCertificate),"123",X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable |
            X509KeyStorageFlags.PersistKeySet)
        {PrivateKey = rsaProvider};
        store.Add(x509Certificate);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)