首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X509Certificate解密异常

X509Certificate解密异常
EN

Stack Overflow用户
提问于 2020-02-07 17:24:42
回答 1查看 66关注 0票数 0

我从认证机构得到了一个数字证书,用它我得到了一个带有私钥的usb贴纸。在VisualStudio中我制作了控制台应用程序,我想用该证书测试加密和解密。为此,我使用了众所周知的代码:

代码语言:javascript
复制
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方法中,一切都按它应该的方式进行:

代码语言:javascript
复制
byte[] byteDecrypted = csp.Decrypt(byteEncrypted, false);

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

有人能帮我吗?

我研究了很多解决方案,但大多数私钥都导出到.pfx文件中,并且在这种情况下使用三参数X509Certificate2构造函数

代码语言:javascript
复制
X509Certificate2 cert = new X509Certificate2("myhost.pfx", "pass",
    X509KeyStorageFlags.MachineKeySet); 

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

EN

回答 1

Stack Overflow用户

发布于 2020-02-16 18:03:32

如果堆栈跟踪中的错误是'keyset‘不存在。则您可能需要'Manage private Keys’的私钥权限

  1. 使用以本地计算机证书存储为目标的证书管理单元创建一个Microsoft管理控制台。
  2. 展开MMC并在安全选项卡上选择管理私钥
  3. ,添加池标识或具有读取权限的IIS帐户。

Please check this

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60110523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档