Извините, но я не говорю по-английски, и я сделаю все возможное.
Я пытался подписать PDF-документ цифровым сертификатом типа PKCS#11 на C#. НЕТ 4.0. Как вы знаете, для такого сертификата требуется закрытый ключ, в моем случае он хранится на Aladdin eToken, а затем делается подпись с помощью itextsharp.
Я пробовал с CAPICOM, System.Security.Cryptography, BouncyCastle, Chilkat, Net.Pkcs11 и т. д. Но ничего не работает.
PdfSignatureAppearance имеет метод SetCrypto(key, cert, ..., ...) , где первый параметр - это ключ сертификата, а второй параметр - тот же сертификат, но я не могу получить закрытый ключ eToken . Эй, читай и думай, что это невозможно.
Я использую родной C #, используя криптографию. NET в несколько строк кода:
X509Certificate2 x509 = (Certificate from X509Certificate2Collection);
CspParameters cspParams = new CspParameters(1",eToken Base Cryptographic Provider", "Default")
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParams))
{
byte[] signature = rsa.SignData(x509.RawData, "SHA1");
//I don't know how join it with itextsharp
rsa.PersistKeyInCsp = false;
rsa.Clear();
}
Я думаю, что могу использовать метод SignData(), но я немного запутался. Как я могу относиться к itextsharp.
Я нашел много документации, но ничего конкретного, например, java-апплеты не работают, потому что у меня 64-битная Windows 7, и коды. NET не работает. Я бы, если возможно, использовал такое же ядро. NET или бесплатные библиотеки с поддержкой 64-разрядной версии Windows 7. Кто-то сделал реальное решение?
Также я хотел бы знать, как удалить кеш PIN-кода eToken, поскольку он запрашивает пароль только один раз, а затем остается в памяти.
Пожалуйста, мне нужна твоя помощь.
Спасибо.