Программирование смарт-карт C#

Как начать программировать на C# (.NET) для смарт-карт? Для начала мне просто нужно знать, как называется кард-ридер (например, Omnikey) и распечатать.

Спасибо за ответ, Алесь.

4 ответов


некоторое время назад я должен был написать то, что, как я думал, будет простым и легким кодом смарт-карты, и позвольте мне сказать вам, это была не прогулка в парке. Прежде всего, оказалось, что хорошую информацию о смарт-картах трудно найти в Сети. И когда я нашел несколько веб-сайтов, было много дискуссий о базовых вызовах Win32 API и целой куче других низкоуровневых вещей, которые не совсем легко читать.

дело в том, что они называются умный карты по какой-то причине. Эта причина заключается в том, что вы взаимодействуете со встроенным микропроцессором, посылая ему команды, которые он понимает и отвечает. Это может немного усложниться, потому что многие производители считали хорошей идеей реализовать свои собственные команды, поэтому многое зависит от типа карты, которую вы используете. Кроме того, есть карты, которые выглядят как смарт-карты, но на самом деле не являются смарт-картами и даже не используют "стандартные" интерфейсы смарт-карт, поэтому вы в конечном итоге используете API смарт-карт Windows только для запуска вашего читателя, а специальный API считывателя смарт-карт предоставляется как .lib в каком-то темном углу их веб-сайта для остальных...

Ну, в конце концов, я получил свое приложение, но, как я уже сказал, Это было нелегко. Во всяком случае, я совершил большую ошибку, предположив, что это будет не очень трудно сделать.

Если вы действительно хотите попасть в смарт-карты, я полагаю, что лучше всего было бы получить хорошая книга на эту тему, но так как я тоже немного больше, чем новичок, я действительно не могу помочь вам в этом.

Что касается веб-сайтов, самая полезная вещь в терминах c#, которую я смог выкопать, была платформа смарт-карт для .Net. Обратите внимание, что это не та статья, которую опубликовал michaelvdnest, хотя автор тот же. В статье, с которой я связан, описывается оболочка C# для собственного API смарт-карт, а michaelvdnest добавляет XML в микс, хотя я этого не делаю точно знаю, каким образом, потому что еще не читал.

Итак, начните разбирать код, поставляемый со статьей, и удачи. Если память мне не изменяет, материал для перечисления читателей довольно легко найти.


проверить рамки смарт-карт для .NET на проекте кода. В нем описывается XML-платформа для .NET для программирования приложений смарт-карт.


Я знаю, что это поздно.....

но

вы можете получить очень простой в использовании и бесплатный для личного использования библиотеки professionall здесь:

http://www.smartcard-api.com/index.shtml

Как только у вас это будет, вам нужно начать понимать APDU и как перемещать их туда и обратно с карты на терминал.

Это действительно огромная тема для покрытия, у меня есть код, который будет читать все общие элементы на стандарте Chip & Pin EMV card к сожалению, это было написано для клиента финансовых услуг, поэтому я не могу дать вам его, я могу объяснить, однако, некоторые из того, что вам нужно предпринять, чтобы прочитать карту.

для других карт тогда это до самой карты, например, у меня есть считыватель карт и пустые карты здесь, и у меня есть некоторые пользовательские данные о некоторых из них, которые только я знаю, как получить доступ, но все же у меня есть некоторые старые спутниковые и туристические карты, которые снова отличаются.

вы можете получить некоторые идеи здесь:

как я могу прочитать лоток от смарт-карты EMV от Java

и есть много информации о смарт-карт в целом можно найти здесь:

http://www.wrankl.de/SCH/SCH.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;
    }