X509证书解密实例

问题描述 投票:0回答:1

我从认证机构获得了数字证书,并获得了带有私钥的USB标签。在Visual Studio中,我制作了控制台应用程序,我想使用该证书测试加密和解密。为此,我使用了众所周知的代码:

private static string EncryptRSA(string input)
        {
            string outputMessage = String.Empty;
            X509Certificate2 cert = GetCertificateFromStore("I find sertificate by Serial number");
            using (RSACryptoServiceProvider csp = (RSACryptoServiceProvider) cert.PublicKey.Key)
            {
                byte[] byteData = Encoding.UTF8.GetBytes(input);
                byte[] byteEncrypted = csp.Encrypt(byteData, false);
                outputMessage = Convert.ToBase64String(byteEncrypted);
            }

            return izlaznaPoruka;
        }

        public static string DecryptRsa(string enkriptovan)
        {
            string text = string.Empty;
            X509Certificate2 cert = GetCertificateFromStore("I find sertificate by Serial number");

            using (RSACryptoServiceProvider csp = (RSACryptoServiceProvider) cert.PrivateKey)
            {
                byte[] byteEncrypted = Convert.FromBase64String(enkriptovan);
                byte[] byteDecrypted = csp.Decrypt(byteEncrypted, false);
                text = Encoding.UTF8.GetString(byteDecrypted);
            }

            return text;
        }

直到这一刻,一切都应该进行,在DecryptRsa方法中:

byte[] byteDecrypted = csp.Decrypt(byteEncrypted, false);

[此时,我的身份验证客户端需要密码-输入正确的密码,并为我弹出以下异常:mscorlib.dll中发生类型'System.Security.Cryptography.CryptographicException'的未处理的异常。发生内部错误。

有人可以帮助我吗?

我已经研究了很多解决方案,但是大多数私钥都被导出到一个.pfx文件,并且在这样的情况下使用三参数X509Certificate2构造函数

X509Certificate2 cert = new X509Certificate2("myhost.pfx", "pass",
    X509KeyStorageFlags.MachineKeySet); 

然后更改文件夹ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys的权限我手动更改了文件夹权限。

c# x509certificate2
1个回答
1
投票

使用针对本地计算机证书存储的证书管理单元创建Microsoft管理控制台(MMC)。

    展开MMC并选择管理私钥
  1. 在“安全性”选项卡上,添加具有读取访问权限的池标识或IIS用户帐户。
  • Please check this
  • © www.soinside.com 2019 - 2024. All rights reserved.