Member 12179018 Ответов: 0

Получите сертификат от usb токена с помощью вызовов crytoapi


привет всем, кто-то знает, как я могу получить сертификат от usb-токена с помощью вызовов cryptoapi в c#, недавно я мог бы получить только для хранилища сертификатов, но теперь я хочу получить от любого usb-токена или кард-ридера, не устанавливая сертификат, заранее спасибо...

Что я уже пробовал:

публичный класс MyCerts
{

static int CERT_STORE_PROV_SYSTEM = 10;
private static int CERT_SYSTEM_STORE_CURRENT_USER = (1 < & lt; 16);
//private static int CERT_SYSTEM_STORE_LOCAL_MACHINE = (2 < & lt; 16);

[Атрибута DllImport("CRYPT32", точка входа = "методу certopenstore", кодировка = кодировка.Юникод, функции setlasterror = true в)]
публичный статический модификатор extern методу certopenstore указателя IntPtr (
int storeProvider, int encodingType,
int hcryptProv, int flags, string pvPara);

[Атрибута DllImport("CRYPT32", точка входа = "CertEnumCertificatesInStore", кодировка = кодировка.Юникод, функции setlasterror = true в)]
публичный статический модификатор extern CertEnumCertificatesInStore указателя IntPtr (
Указателя IntPtr storeProvider,
Указателя IntPtr prevCertContext);

[Атрибута DllImport("CRYPT32", точка входа = "CertCloseStore", кодировка = кодировка.Юникод, функции setlasterror = true в)]
публичный статический модификатор extern bool в CertCloseStore (
Указателя IntPtr storeProvider,
флаги int);

X509Certificate2Collection m_certs;


общественные MyCerts()
{
m_certs = новый X509Certificate2Collection();
}

общественные строку инициализации()
{
пробовать
{
Указателя IntPtr storeHandle;
storeHandle = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, " мой");
CurrentCertContext указателя IntPtr ;
currentCertContext = CertEnumCertificatesInStore(storeHandle, (IntPtr)0);
int i = 0;
while (currentCertContext != (IntPtr)0)
{
m_certs.Insert(i++, new X509Certificate2(currentCertContext));
currentCertContext = CertEnumCertificatesInStore(storeHandle, currentCertContext);

}
CertCloseStore(storeHandle, 0);
верните "Cantidad de certificados encontrados:" + m_certs.Рассчитывать.Метод toString();
}
поймать (исключение бывший)
{
возвращение экс.Метод toString();
}


}

публичный список & lt;infofirma> getCollection_Name()
{
List & lt;infofirma> lista_certificados = новый список & lt;infofirma>();
int cont = 0;
по каждому элементу (ВАР Коль в m_certs)
{
InfoFirma cer = новая Инфофирма();
ЦЭИ.nombre_cert = цв.GetNameInfo(X509NameType. SimpleName, true);
ЦЭИ.nume_cert = продолжение;
lista_certificados.Добавить (cer);
продолжение++;
}

возврат lista_certificados;
}

public X509Certificate2 getCert(int pos)
{

возврат m_certs[pos];
}



public X509Certificate2 this[int index]
{
получить
{
// Проверьте пределы индекса.
if (index < 0 | / index > m_certs.Рассчитывать)
возвращать null;
ещё
вернуться m_certs[индекс];
}
}

Member 10299249

вот что такое инфофирма

Member 11836800

Привет, у тебя есть решение? если да, пожалуйста, пришлите мне решение amreshn2000@gmail.com

0 Ответов