Я использую смарт-карту Gemalto IDPrime .NET для своего приложения.Следующий метод шифрует некоторые байты и отображает подпись:
private static void SimpleDataEncryption()
{
var csp = new CspParameters(1, "Microsoft Base Smart Card Crypto Provider")
{
Flags = CspProviderFlags.UseDefaultKeyContainer
};
var rsa = new RSACryptoServiceProvider(csp);
var data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Console.WriteLine("Data : " + BitConverter.ToString(data));
var sig = rsa.SignData(data, "SHA1");
Console.WriteLine("Signature : " + BitConverter.ToString(sig));
var verified = rsa.VerifyData(data, "SHA1", sig);
Console.WriteLine("Verified : " + verified);
}
Пока что этот метод работает безупречно.
Моя проблема заключается в том, что каждый раз при запуске приложенияWindows предлагает пользователю повторно ввести ПИН-код.Документация по Архитектура смарт-карт гласит следующее:
Базовый CSP внутренне поддерживает кэш ПИН-кода для каждого процесса.ПИН-код зашифрован и хранится в памяти.
Я нашел способ программно установить ПИН-код смарт-карты с помощью advapi32.dll
, но этот подход мне кажется очень хакерскимтак как ПИН-код должен быть передан в виде простого текста.
Итак, мой вопрос:
Есть ли способ, поддерживаемый .NET для кэширования ПИН-кода для смарт-карты?первый раз, когда пользователь вводит его правильно и использует его каждый раз, пока пользователь не изменит PIN-код?