Подпишите несколько PDF-файлов с помощью itextsharp и токенов, каждый раз запрашивая пин-код


person Nikola Loncar    schedule 17.12.2014    source источник


Ответы (1)


Наконец я нашел решение, этот код делает свое дело:

...
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)pk.PrivateKey;

CspParameters cspp = new CspParameters();
cspp.KeyContainerName = rsa.CspKeyContainerInfo.KeyContainerName;
cspp.ProviderName = rsa.CspKeyContainerInfo.ProviderName;
// cspp.ProviderName = "Microsoft Smart Card Key Storage Provider";

cspp.ProviderType = rsa.CspKeyContainerInfo.ProviderType;

cspp.Flags = CspProviderFlags.NoPrompt;

RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider(cspp);

rsa.PersistKeyInCsp = true;
...
MakeSignature.SignDetached(...);

Создание CspParameters перед подписанием запоминает пин-код. На msdn есть официальная документация.

person Nikola Loncar    schedule 18.12.2014
comment
Вы также можете заполнить поле cspp.KeyPassword для пароля. У меня похожая проблема, за исключением того, что PIN-код запрашивается, когда я пытаюсь подписать 2-й, 3-й, 4-й... n-й документ. Для первого подписания я не получаю никаких подсказок, а они начинаются со 2-го, пока я не перезапущу приложение, чтобы я мог подписать без подсказки. Любые идеи? - person Gabrielius; 29.05.2015
comment
С этим должно быть что-то не так, потому что я могу подписать несколько документов одним запросом. - person Nikola Loncar; 01.06.2015
comment
Похоже SafeNet CSP был установлен неправильно. Мне нужно было добавить ключ реестра NonRepudiationOID с пустым значением в [HKEY_LOCAL_MACHINE\SOFTWARE\SafeNet\Authentication\SAC\General]. Теперь он работает нормально. - person Gabrielius; 11.07.2015