2015-02-24 2 views
0

Другой способ создания цифровой подписи с использованием закрытого ключа (который находится на смарт-карте с сертификатом, установленным в локальном хранилище сертификатов) в .NET Framework, отличном от этого, потому что я понятия не имею, как узнать имя контейнера ключей (и, похоже, никто не делает этого)?Способы генерации цифровой подписи с .NET Framework

CspParameters^ cspa = gcnew CspParameters(ProviderType, ProviderName, keyContainerName, cryptoSecurityKey, securityString); 

RSACryptoServiceProvider^ csp = gcnew RSACryptoServiceProvider(cspa); 

csp.SignHash() 

Я так понимаю, если один инициализирует CspParameters, без keyContainerName, Crypto Provider не имеет возможности сказать, что сертификат один хочет использовать для подписания, поэтому он просто не будет работать. Я искал сеть для информации, и никто не нашел (кроме нескольких вопросов без ответа). Единственные примеры, которые я нашел, используют строки типа «example», «test» для keyContainerName. В случае программы, которая будет использоваться множеством людей с большим количеством сертификатов и смарт-карт, это бесполезно, потому что вам нужен метод, который смотрит на выбранный сертификат и определяет его имя контейнера (например, certutils.exe) и затем создает CspParameters, RSACryptoServiceProvider и затем подписывает. Так что теперь это невозможно.

Итак, каковы другие способы генерации цифровой подписи со смарт-картой в .NET Framework?

+0

Скопируйте/вставьте вопрос о своем названии в поле поиска Google, сделайте 2-й удар. У этого есть хороший фрагмент кода, который показывает вам, как использовать RSAPKCS1SignatureFormatter –

+0

На самом деле это был не второй хит в моем случае, но я нашел это. Спасибо! –

+0

Есть ли идеи о том, как передать пароль RSACryptoServiceProvider, если вы хотите избежать диалогового окна ввода PIN-кода по умолчанию и ввести его другим способом? –

ответ

0

В случае, если кто-то ищет ответ на этот вопрос, this article показывает путь:

В двух словах, в C++/CLI это можно сделать так:

X509Certificate2^ certificate = //... get your certificate that has a corresponding private key 

RSACryptoServiceProvider^ csp = safe_cast<RSACryptoServiceProvider^>(certificate->PrivateKey); 

csp.SignHash(); 

Однако, до сих пор неясно, как передать пароль RSACryptoServiceProvider, если вы не хотите вызывать диалоговое окно ввода CSP-кода собственного CSP.

Смежные вопросы