Программирование смарт-карт на C # - PullRequest
8 голосов
/ 31 января 2011

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

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

Ответы [ 4 ]

14 голосов
/ 31 января 2011

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

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

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

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

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

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

3 голосов
/ 31 января 2011

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

2 голосов
/ 15 июня 2012

Я знаю, что уже поздно .....

но

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

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

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

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

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

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

Как мне прочитать PAN с EMV SmartCard из Java

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

http://www.wrankl.de/SCH/SCH.html

особенно общие сведения (из которыхесть)

0 голосов
/ 17 февраля 2017

Я работал над приложением в 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;
    }
...