2011-01-31 31 views
8

¿Cómo debo comenzar a programar en C# (.NET) para tarjetas inteligentes? Para empezar, solo necesito saber cuál es el nombre de Card Reader (por ejemplo, Omnikey) e imprimirlo.C# programación de tarjetas inteligentes

Gracias por la respuesta, Ales.

Respuesta

13

Hace un tiempo tuve que escribir lo que pensé iba a ser un código de tarjeta inteligente simple y fácil y déjame decirte que no era un paseo por el parque. En primer lugar, resultó que la buena información sobre las tarjetas inteligentes es difícil de encontrar en la red. Y cuando encontré varios sitios web, hubo mucha discusión sobre las llamadas subyacentes de la API de Win32 y un montón de otras cosas de bajo nivel, lo cual no es una lectura fácil.

Lo que pasa es que se llaman tarjetas inteligentes por algún motivo. Esa razón es que básicamente estás interactuando con un microprocesador integrado al enviarle comandos que entiende y responde. Esto puede ser un poco complicado porque muchos de los fabricantes pensaron que era una buena idea implementar sus propios comandos, por lo que muchas cosas dependen del tipo de tarjeta que esté utilizando. Además de eso, hay tarjetas que parecen tarjetas inteligentes pero que no son realmente tarjetas inteligentes y ni siquiera usan ninguna de las interfaces de tarjeta inteligente "estándar", por lo que terminas usando la API SmartCard de Windows solo para encender tu lector, y el API especial del lector de tarjetas inteligentes proporcionada como .lib en algún rincón oscuro de su sitio web para el resto ...

Bueno, hice que mi aplicación funcionara eventualmente, pero como dije, no fue fácil. En cualquier caso, cometí un gran error al asumir que no sería muy difícil hacerlo.

Si realmente quieres entrar en las tarjetas inteligentes, supongo que tu mejor opción sería conseguir un buen libro sobre el tema, pero como yo también soy poco más que un novato, realmente no puedo ayudarte.

En cuanto a los sitios web, lo más útil en términos de C# que pude desenterrar fue A Smartcard Framework for .Net. Tenga en cuenta que este no es el mismo artículo que el publicado por michaelvdnest, aunque el autor es el mismo. El artículo que he vinculado describe una envoltura de C# para la API nativa de la tarjeta inteligente, mientras que michaelvdnest agrega XML a la mezcla, aunque no sé exactamente de qué manera porque todavía no lo he leído.

Así que comience a diseccionar el código suministrado con el artículo y buena suerte. Si la memoria me sirve, la enumeración del lector es bastante fácil de encontrar.

+0

Muchas gracias por esta larga respuesta :) mi compañero de trabajo ya me dijo que me queda un largo camino por recorrer ... y tampoco me pudo ayudar. Bueno, ahora sé que se puede hacer y gracias por el enlace, ya lo encontré y estoy leyéndolo y procesándolo ahora. – Thorusan86

+0

@sql Usted no es nuevo en Stackoverflow. Haga una nueva pregunta – dandan78

+0

No está bromeando que no sea un paseo por el parque. Uno de nuestros desarrolladores había implementado previamente código basado en el artículo al que se hace referencia, por lo que leer la tarjeta no me presenta un problema, pero estoy luchando para descubrir cómo hacer la autenticación para que pueda leer datos seguros de tarjetas de tacógrafo digitales europeas. Leer la especificación es un poco como nadar en el barro. –

3

Consulte Smart Card Framework for .NET en Code Project. Describe un marco XML para .NET para programar aplicaciones de tarjeta inteligente.

+0

Ya lo he hecho y todavía estoy trabajando en ello. ¡Gracias! :) – Thorusan86

+0

Esto es por el mismo tipo y es más nuevo: http://www.codeproject.com/Articles/16653/A-Smart-Card-Framework-for-NET – VoteCoffee

1

Sé que es tarde ..... manera

pero

se puede obtener una muy fácil de usar y libre para uso personal de la biblioteca professionall aquí:

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

Una vez que tenga eso, debe comenzar a entender las APDU y cómo transferirlas de una tarjeta a otra.

Realmente es un gran tema para cubrir, tengo un código que leerá todos los elementos comunes en una tarjeta estándar Chip & Pin EMV lamentablemente fue escrita para un cliente de servicios financieros, así que no puedo darte, yo Sin embargo, puede explicarle algo de lo que debe hacer para leer la tarjeta.

Para otras tarjetas, entonces depende de la tarjeta en sí, por ejemplo, tengo un lector de tarjetas y tarjetas en blanco aquí, y tengo algunos datos personalizados sobre algunos de los cuales solo sé cómo acceder, y aún así tengo algunas viejas tarjetas de satélite y de viaje que son diferentes de nuevo.

Usted puede obtener algunas ideas aquí:

How do I read the PAN from an EMV SmartCard from Java

y hay un montón de información sobre las tarjetas inteligentes en general que se encuentran aquí:

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

en especial el material genérico (de los cuales hay algunos)

0

He estado trabajando en una aplicación en Visual Studio 2015 para rea d tarjetas inteligentes. Lo que quiere hacer es conectar los dispositivos USB conectados a su computadora que son lectores de tarjetas inteligentes. A continuación, repita el retorno de la información que busca. Si bien los lectores tienen bastantes propiedades, estas son las que elegí usar. Espero que esto le sirva de inicio en la dirección correcta:

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; 
    } 
Cuestiones relacionadas