我从认证机构得到了一个数字证书,用它我得到了一个带有私钥的usb贴纸。在VisualStudio中我制作了控制台应用程序,我想用该证书测试加密和解密。为此,我使用了众所周知的代码:
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的权限我手动更改了文件夹权限。
发布于 2020-02-16 18:03:32
如果堆栈跟踪中的错误是'keyset‘不存在。则您可能需要'Manage private Keys’的私钥权限
https://stackoverflow.com/questions/60110523
复制相似问题