¿Existe una biblioteca de código abierto para escribir y leer datos en C# desde una tarjeta inteligente que utiliza un lector de tarjeta inteligente? Mi modelo de tarjeta inteligente es mifare1k
y mi lector es ucr122u
.¿Cómo se escribe/lee en una tarjeta inteligente?
Respuesta
Salida pcsc sostenido de Daniel Müller, https://github.com/danm-de/pcsc-sharp
funciona muy bien para mí en ventanas y mono.
Enlace actual: https://github.com/danm-de/pcsc-sharp –
Sé que esto es una vieja pregunta, pero es posible que desee PCSC-Sharp, que es clases de envoltura/SC
PC para .NET, escrito en C#. El paquete contiene clases a , acceda al Administrador de Recursos de la Computadora Personal/Tarjeta Inteligente utilizando la API nativa PC/SC del sistema . Implementa el soporte parcial ISO7816. La biblioteca está escrita para ejecutarse tanto en Windows como en Unix (Linux con Mono usando PCSC Lite).
El proyecto se encuentra en GitHub: https://github.com/danm-de/pcsc-sharp
También puede comprobar la documentación aquí: https://danm.de/docs/pcsc-sharp/index.html
para acr1252u
he encontrado la solución en un código C++: Sólo en el enlazador necesitamos agregar winscard.h
#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <cstdint>
#include <cstring>
#include <winscard.h>
std::wstring s2ws(const std::string& s);
int main(int argc, char* argv[]) {
SCARDCONTEXT context = 0;
LONG ret = SCardEstablishContext(SCARD_SCOPE_SYSTEM, nullptr, nullptr, &context);
if (ret != SCARD_S_SUCCESS) {
std::cout << "SCardEstablishContext: " << ret<< std::endl;
}
else {
LPTSTR allReaderNames = nullptr;
DWORD readerCount = SCARD_AUTOALLOCATE;
ret = SCardListReaders(context, nullptr, reinterpret_cast<LPTSTR>(&allReaderNames), &readerCount);
if (ret != SCARD_S_SUCCESS) {
std::cout << "SCardListReaders: " << ret << std::endl;
}
else {
std::string readerName("ACS ACR1252 1S CL Reader PICC 0");
std::wstring stemp = s2ws(readerName);
LPCWSTR result = stemp.c_str();
DWORD activeProtocol = 0;
SCARDHANDLE card = 0;
ret = SCardConnect(context, result, SCARD_SHARE_DIRECT, 0, &card, &activeProtocol);
if (ret != SCARD_S_SUCCESS) {
std::cout << "SCardConnect: " << ret << std::endl;
}
else {
std::vector<std::uint8_t> outputBuffer{ 0xE0, 0x0, 0x0, 0x21, 0x01, 0x71 };
std::vector<std::uint8_t> inputBuffer(64, 0);
DWORD bytesReturned = 0;
DWORD controlcode = SCARD_CTL_CODE(3500);
ret = SCardControl(card, controlcode, outputBuffer.data(), outputBuffer.size(), inputBuffer.data(), inputBuffer.size(), &bytesReturned);
if (ret != SCARD_S_SUCCESS) {
std::cout << "SCardControl: " << ret << std::endl;
}
else {
std::cout << "Response: " << std::hex << std::setfill('0');
for (std::size_t i = 0; i < bytesReturned; ++i) {
std::cout << std::setw(2) << static_cast<std::uint32_t>(inputBuffer[i]) << " ";
}
std::cout << std::dec << std::endl;
SCardDisconnect(card, SCARD_LEAVE_CARD);
}
}
// Release the memory that SCardListReaders allocated for us
SCardFreeMemory(context, allReaderNames);
}
ret = SCardReleaseContext(context);
if (ret != SCARD_S_SUCCESS) {
std::cout << "SCardReleaseContext: " << ret << std::endl;
}
std::getchar();
}
return 0;
}
std::wstring s2ws(const std::string& s)
{
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}
- 1. Cómo escribir una tarjeta inteligente con tarjeta de crédito
- 2. ¿Cómo interactuar con una tarjeta inteligente en Java?
- 3. iniciando la programación de tarjeta inteligente
- 4. Autenticación de tarjeta inteligente con ASP.NET
- 5. Acceso a la tarjeta inteligente con Java
- 6. ¿Cómo hacer una firma digital en una aplicación web (JavaScript) usando una tarjeta inteligente?
- 7. Android NFC: etiqueta perdida cuando el comando APDU se envió a una tarjeta inteligente
- 8. Determinación de los requisitos de energía para una tarjeta inteligente sin contacto en Java.
- 9. ¿Cómo leo el PAN de una tarjeta inteligente EMV de Java
- 10. Reutilizando Java Keystore al acceder a una tarjeta inteligente en Windows
- 11. Cómo leer los detalles de la tarjeta VISA inteligente basada en EMV
- 12. Cómo hacer que la aplicación php requiera autenticación de tarjeta inteligente
- 13. ¿Cómo se codifican estos datos de una tarjeta magnética?
- 14. ¿El plural inteligente siempre inteligente?
- 15. Sitio web PKSC n. ° 11 autenticación de tarjeta inteligente y certificados de cliente SSL
- 16. Cómo crear una carpeta privada en una tarjeta SD
- 17. Error "No se puede asociar tarjeta con cuentas en este mercado" al agregar una tarjeta a una cuenta.
- 18. ¿Podemos hacer una copia inteligente en Python?
- 19. ¿Crear una matriz en plantilla inteligente?
- 20. Cómo simular una tarjeta SIM para Android
- 21. Transliteración inteligente en PHP
- 22. Eliminar una carpeta en la tarjeta SD
- 23. Escribiendo un archivo en una tarjeta SD
- 24. Hogar inteligente en Emacs
- 25. Evento cuando se cambia la tarjeta SIM
- 26. No se puede mover una aplicación a la tarjeta SD
- 27. OpenGL sin una tarjeta gráfica
- 28. Cómo abrir una tarjeta de contacto en Android con ID
- 29. ¿Cómo crear una tarjeta rasca y gana en Android?
- 30. Servicio de reinicio para la aplicación en la tarjeta SD Cuando se repone la tarjeta SD
posible duplicado de [¿Tiene un ejemplo de código abierto para guardar datos en el lector de tarjetas inteligentes RFID ...] (http://stackoverflow.com/questions/4014037/do-you-have-an-open-source-example -for-saving-data-in-rfid-smart-card-reader) – TFD
@TFD, esta pregunta es mucho más específica, lo que también debería facilitar la respuesta. Menciona una tarjeta y un lector específicos. –
@Matthew_Flaschen Cierto, pero IIRC Mifare UCR son clones asiáticos, necesitan encontrar qué modelo base es de todos modos. Han pedido es la primera pregunta. ¡También cualquiera que use Mifare 1k necesita que le lean la cabeza! – TFD