是否有一个开源库,用于使用智能卡读卡器从智能卡中写入和读取C#中的数据?我的智能卡型号是mifare1k
,我的读卡器是ucr122u
。你如何写/读智能卡?
15
A
回答
8
退房丹尼尔·穆勒的PCSC锐利,https://github.com/danm-de/pcsc-sharp
都非常好,我在Windows和单声道。
+3
当前链接:https://github.com/danm-de/pcsc-sharp – 2016-04-13 08:31:03
1
我知道这是一个老问题,但你可能要PCSC,夏普这是.NET
PC/SC的包装类,C#编写的。该软件包包含的类别为 使用系统的 本地PC/SC API访问个人计算机/智能卡资源管理器。实现部分ISO7816支持。 该库被编写为可在Windows和Unix上运行(Linux使用Mono,使用 PCSC Lite)。
该项目是在GitHub上: https://github.com/danm-de/pcsc-sharp
您还可以查看这里的文档: https://danm.de/docs/pcsc-sharp/index.html
0
为acr1252u
我发现在C++代码的解决方案:只 在链接器中,我们需要添加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. ACS智能卡读写器
- 2. 如何区分智能卡读卡器错误和智能卡错误
- 3. 智能卡读写器插件(插入卡)事件
- 4. 黑莓智能卡读卡器示例
- 5. 如何在智能卡读卡器中实现被动认证?
- 6. 如何在没有卡片的情况下向智能卡读卡器(而不是智能卡)发送命令?
- 7. 如何使用java卡将数据写入智能卡?与例
- 8. 智能卡读卡器是否支持所有智能卡模型?
- 9. .NET或COM HID iCLASS智能卡读写器
- 10. 试图使用智能卡读取和写入字符串智能卡I/O API
- 11. 读取智能卡(8位或16位?)
- 12. Android/NFC:从智能卡(EMV)读取ATR
- 13. 使用ACR38读卡器从SLE 4442智能卡读取数据读卡器
- 14. 如何从c#中的智能卡中读取凭据
- 15. 如何在C#中的智能卡上写文件
- 16. 智能卡开发
- 17. 智能卡和Android
- 18. 智能卡查询
- 19. Java - 如何检测智能卡hotplug
- 20. 如何确定智能卡ATR面罩?
- 21. 为什么Omnikey 5325智能卡读卡器不能识别我的卡?
- 22. 列出使用智能卡读卡器的进程
- 23. 是否在读卡器的智能卡对应的证书,C#
- 24. 你能同时读写javascript数组吗?
- 25. 如何编写智能手表2
- 26. 如何编写PhpStorm智能插件?
- 27. C#智能卡编程
- 28. 启动智能卡编程
- 29. 虚拟智能卡实现
- 30. Active Directory智能卡授权
可能的重复[你有一个开源的RFID智能卡读卡器保存数据的例子..](http://stackoverflow.com/questions/4014037/do-you-have-an-open-source-example为了节省数据在rfid智能卡读卡器) – TFD 2010-11-07 06:13:09
@TFD,这个问题是更具体,这也应该更容易回答。它提到了一个特定的卡片和读卡器。 – 2010-11-07 06:17:29
@Matthew_Flaschen真的,但是IIRC Mifare UCR是亚洲克隆,无论如何都需要找到基础模型。询问是第一个问题。另外任何使用Mifare 1k的人都需要阅读他们的头像! – TFD 2010-11-08 03:00:04