Как мне начать программировать смарт-карты на C# (.NET)? Для начала мне просто нужно знать, как называется картридер (например, Omnikey) и распечатать его.
Спасибо за ответ, Алесь.
Как мне начать программировать смарт-карты на C# (.NET)? Для начала мне просто нужно знать, как называется картридер (например, Omnikey) и распечатать его.
Спасибо за ответ, Алесь.
Некоторое время назад мне пришлось написать то, что, как я думал, должно было стать простым и легким кодом смарт-карты, и позвольте мне сказать вам, что это была не прогулка в парке. Во-первых, оказалось, что хорошую информацию о смарт-картах трудно найти в Сети. И когда я нашел несколько веб-сайтов, было много обсуждений базовых вызовов Win32 API и куча других низкоуровневых вещей, которые не совсем легко читать.
Дело в том, что они называются смарт-картами не просто так. Причина в том, что вы в основном взаимодействуете со встроенным микропроцессором, посылая ему команды, которые он понимает и на которые реагирует. Это может быть немного сложно, потому что многие производители считают хорошей идеей реализовать свои собственные команды, поэтому многое зависит от типа используемой карты. Кроме того, есть карты, которые выглядят как смарт-карты, но на самом деле не являются смарт-картами и даже не используют какой-либо из «стандартных» интерфейсов смарт-карт, поэтому в конечном итоге вы используете Windows SmartCard API только для запуска своего ридера, а специальный API для чтения смарт-карт, предоставленный в виде .lib в каком-то неясном уголке их веб-сайта для остальных...
Что ж, в конце концов мое приложение заработало, но, как я уже сказал, это было непросто. Во всяком случае, я совершил большую ошибку, полагая, что это будет не очень трудно сделать.
Если вы действительно хотите заняться смарт-картами, я полагаю, что вам лучше всего было бы найти хорошую книгу по этому вопросу, но, поскольку я тоже немного больше, чем новичок, я действительно не могу вам помочь.
Что касается веб-сайтов, самое полезное в терминах C#, которое мне удалось найти, это смарт-карта. Фреймворк для .Net. Обратите внимание, что это не та статья, которую опубликовал michaelvdnest, хотя автор тот же. В статье, на которую я ссылаюсь, описывается оболочка C# для собственного API смарт-карт, в то время как michaelvdnest добавляет в смесь XML, хотя я точно не знаю, каким образом, потому что еще не читал ее.
Так что начните анализировать код, прилагаемый к статье, и удачи. Если мне не изменяет память, перечисление читателей довольно легко найти.
Ознакомьтесь с Smart Card Framework для .NET в Code Project. Он описывает структуру XML для .NET для программирования приложений смарт-карт.
Я знаю, что уже поздно.....
но
Вы можете получить очень простую в использовании и бесплатную для личного пользования профессиональную библиотеку здесь:
https://www.smartcard-api.com/
Здесь также есть библиотека смарт-карт сообщества (полностью бесплатная для использования).
https://www.nuget.org/packages/PCSC
В последние годы я предпочитал использовать Nu-get, а не API смарт-карт, если вам нужна коммерческая поддержка, однако библиотека API смарт-карт — лучший выбор.
Как только вы это сделаете, вам нужно начать понимать APDU и как перемещать их туда и обратно с карты на терминал.
Это действительно огромная тема для обсуждения, у меня есть код, который будет считывать все общие элементы на стандартной карте EMV Chip & Pin, к сожалению, он был написан для клиента, предоставляющего финансовые услуги, поэтому я не могу вам его дать, но я могу объяснить некоторые того, что вам нужно предпринять, чтобы прочитать карту.
Для других карт все зависит от самой карты, например, у меня есть кард-ридер и пустые карты, и у меня есть некоторые пользовательские данные на некоторых из них, к которым только я знаю, как получить доступ, но все же у меня есть какой-то старый спутник и проездные, которые снова разные.
Вы можете получить некоторые идеи здесь:
Как прочитать PAN из Смарт-карта EMV от Java
и здесь можно найти много информации о смарт-картах в целом:
https://web.archive.org/web/20160329205518/http://wrankl.de/SCTables/SCTables.html
особенно общие вещи (которых есть некоторые)
Я работаю над приложением в Visual Studio 2015 для чтения смарт-карт. Что вы хотите сделать, так это подключить USB-устройства к вашему компьютеру, которые являются устройствами чтения смарт-карт. Затем повторите возврат для информации, которую вы ищете. Хотя у ридеров довольно много свойств, вот те, которые я решил использовать. Я надеюсь, что это даст вам начало в правильном направлении:
static List<USBDeviceInfo> GetUSBDevices()
{
List<USBDeviceInfo> devices = new List<USBDeviceInfo>();
ManagementObjectCollection collection;
using (var searcher = new ManagementObjectSearcher(@"Select * FROM Win32_PnPEntity where Description Like ""%Smart%card%"""))
collection = searcher.Get();
string Device_ID = "";
foreach (var device in collection)
{
devices.Add(new USBDeviceInfo(
(string)device.GetPropertyValue("DeviceID"),
(string)device.GetPropertyValue("PNPDeviceID"),
(string)device.GetPropertyValue("Name"),
(string)device.GetPropertyValue("Description"),
(string)device.GetPropertyValue("Status")));
Device_ID = (string)device.GetPropertyValue("DeviceID");
}
collection.Dispose();
return devices;
}