Я получил цифровой сертификат от сертифицированного органа, с ним я получил наклейку 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);
На этом этапе моему клиенту аутентификации требуется пароль - я ввожу правильный пароль, и у меня появляется следующее исключение: необработанное исключение типа 'System.Security.Cryptography.CryptographicException' произошло в mscorlib.dll Произошла внутренняя ошибка.
Может любой Помогите мне?
Я исследовал множество решений, но большинство закрытых ключей экспортируются в файл .pfx и используют трехпараметрический конструктор X509Certificate2, когда это похоже на
X509Certificate2 cert = new X509Certificate2("myhost.pfx", "pass",
X509KeyStorageFlags.MachineKeySet);
Тогда изменить разрешение папки ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys. Я вручную изменил права на папку ..