c# - 从 RSACryptoServiceProvider 创建 X509Certificate2 失败,找不到请求的对象

标签 c# .net rsa x509 x509certificate2

示例代码:

        CspParameters cspParameters = new CspParameters();
        cspParameters.ProviderType = 1; // PROV_RSA_FULL

        // Create the crypto service provider, generating a new
        // key.
        mRsaCSP = new RSACryptoServiceProvider(mDefaultKeyLength, cspParameters);
        mRsaCSP.PersistKeyInCsp = true;
        RSAParameters privateKey = mRsaCSP.ExportParameters(true);


        byte[] rsaBytes = mRsaCSP.ExportCspBlob(true);

        try
        {
            X509Certificate2 cert = new X509Certificate2(rsaBytes);                
            mKeyDataPfx = Convert.ToBase64String(cert.Export(X509ContentType.Pkcs12, password));
        }
        catch (Exception ce)
        {
            string error = ce.Message;
        }

最佳答案

这是我的解决方案,使用了 BouncyCaSTLe 库。

// create the RSA key from an XML string
RSACryptoServiceProvider key = new RSACryptoServiceProvider();
key.FromXmlString(keyTextBox.Text);

// convert to BouncyCastle key object
var keypair = DotNetUtilities.GetRsaKeyPair(key);

var gen = new X509V3CertificateGenerator();

string certName = Path.GetFileNameWithoutExtension(fileName);
var name = new X509Name("CN=" + certName);
var serial = BigInteger.ProbablePrime(120, new Random());

gen.SetSerialNumber(serial);
gen.SetSubjectDN(name);
gen.SetIssuerDN(name);
gen.SetNotAfter(DateTime.Now.AddYears(10));
gen.SetNotBefore(DateTime.Now);
gen.SetSignatureAlgorithm("MD5WithRSA");
gen.SetPublicKey(keypair.Public);

// generate the certificate
var newCert = gen.Generate(keypair.Private);
// convert back to .NET certificate
var cert = DotNetUtilities.ToX509Certificate(newCert);
// export as byte array
byte[] certData = cert.Export(X509ContentType.Pfx);

File.WriteAllBytes(fileName, certData);

关于c# - 从 RSACryptoServiceProvider 创建 X509Certificate2 失败,找不到请求的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9143036/

相关文章:

c# - 如何在同一页面上使用 Xamarin.Form 控件和 native 控件

c# - 在 Emgu Cv 中写入视频时出错

javascript - .html 文件是否可以识别 .NET scriptlet 还是必须将其转换为 aspx

c# - AppDomain 证据没有区域?

c++ - RSA算法——无法验证d

ios - 将私钥添加到证书,反之亦然

c# - C# winforms 上的文件夹浏览器对话框

.net - 如何查找 Web 应用程序加载的 DLL?

c# - ToLookup 是否强制立即执行序列

python-3.x - 如何在 python 中建立双向加密的服务器-客户端-连接?