C # X509 USB-сертификат зависает приложение - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь выяснить, почему мое приложение зависает при выходе, после использования сертификата токена usb.Без каких-либо блоков try / catch или другой логики код:

X509Store s= new X509Store(StoreName.My, StoreLocation.CurrentUser);
s.Open(OpenFlags.OpenExistingOnly);
X509Certificate2 cert = s.Certificates[0];
s.Close();

RSACryptoServiceProvider rsa = cert.PublicKey.Key as RSACryptoServiceProvider;
byte[] cryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes("test"), true);

rsa = cert.PrivateKey as RSACryptoServiceProvider;
string x = Encoding.UTF8.GetString(rsa.Decrypt(cryptedData, true));

Когда я запускаю код внутри события нажатия кнопки, мне предлагается ввести PIN-код USB-токена.После того, как я ввожу и подтверждаю PIN-код, переменная x == «test», чего и следовало ожидать.Поэтому шифрование и дешифрование с помощью токена работают.

Когда я закрываю форму, приложение просто зависает, и, если я нажимаю «сломать все» в VS2017, даже Visual Studio зависает.Я предполагаю, что что-то, связанное с функциями криптографии usb-токена, не выпускается / не закрывается.

Я пытался, без всякой удачи, с:

Environment.Exit(0);
cert.Reset();
rsa.Clear();
rsa.Dispose();
cert.Dispose();

Есть идеи?Спасибо.

...