C# 访问windows证书存储中标记为不可导出的x509证书中的私钥

C# 访问windows证书存储中标记为不可导出的x509证书中的私钥,c#,private-key,x509certificate2,certificate-store,C#,Private Key,X509certificate2,Certificate Store,我已成功访问证书集合并通过指纹指向特定证书。我可以访问它的所有属性,并且它的“HasPrivateKey”设置为true CspKeyContainerInfo中的“可导出”标记为false 当我执行PrivateKey.ToXmlString(false)时,意味着我不获取键参数,只获取模数和指数,这很好: <RSAKeyValue> <Modulus>4hjg1ibWXHIlH...ssmlBfMAListzrgk=</Modulus> &

我已成功访问证书集合并通过指纹指向特定证书。我可以访问它的所有属性,并且它的“HasPrivateKey”设置为true

CspKeyContainerInfo中的“可导出”标记为false

当我执行PrivateKey.ToXmlString(false)时,意味着我不获取键参数,只获取模数和指数,这很好:

<RSAKeyValue>
    <Modulus>4hjg1ibWXHIlH...ssmlBfMAListzrgk=</Modulus>
    <Exponent>AQAB</Exponent>
</RSAKeyValue>

干杯

不,这是不可能的。谢谢CryptoGuy,你知道有任何第三方工具可以做到这一点吗?或者这就是它现在的样子,也许应该是这样的?此标志的全部目的是防止以明文形式导出密钥,如果不允许导出,CSP将不会给您密钥。在.NET framework中是否有其他方法可以从证书存储中的证书中读取标记为不可导出的私钥?您是否阅读了我的第一个答复?
<RSAKeyValue>
    <Modulus>4hjg1ibWXHIlH...ssmlBfMAListzrgk=</Modulus>
    <Exponent>AQAB</Exponent>
    <P>8QZCtrmJcr9uW7VRex+diH...jLHV5StmuBs1+vZZAQ==</P>
    <Q>8CUvJTv...yeDszMWNCQ==</Q>
    <DP>elh2Nv...cygE3657AQ==</DP>
    <DQ>MBUh5XC...+PfiMfX0EQ==</DQ>
    <InverseQ>oxvsj4WCbQ....LyjggXg==</InverseQ>
    <D>KrhmqzAVasx...uxQ5VGZmZ6yOAE=</D>
</RSAKeyValue>
   X509Certificate2Collection xcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByThumbprint, "4678237245FEDC8059D113675955DFB870D36BF4", false);

        foreach (X509Certificate2 x509 in xcollection)
        {
            var y = x509.PrivateKey.ToXmlString(false);
            var f = x509.PrivateKey.ToXmlString(true);
        }