Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何写入/读取智能卡?_C#_Smartcard_Rfid_Mifare - Fatal编程技术网

C# 如何写入/读取智能卡?

C# 如何写入/读取智能卡?,c#,smartcard,rfid,mifare,C#,Smartcard,Rfid,Mifare,是否有一个开源库,用于使用智能卡读卡器从智能卡以C#格式写入和读取数据?我的智能卡型号是mifare1k,读卡器是ucr122u查看Daniel Müller的pcsc sharp 对我来说,在windows和mono上工作得非常好。我知道这是一个老问题,但你可能想问PCSC Sharp,这是 用于.NET的PC/SC包装类,用C#编写。该包包含要删除的类 使用系统的 本机PC/SC API。实现部分ISO7816支持。 该库编写为在Windows和Unix(Linux和Mono)上运行,使用

是否有一个开源库,用于使用智能卡读卡器从智能卡以C#格式写入和读取数据?我的智能卡型号是
mifare1k
,读卡器是
ucr122u

查看Daniel Müller的pcsc sharp


对我来说,在windows和mono上工作得非常好。

我知道这是一个老问题,但你可能想问PCSC Sharp,这是

用于.NET的PC/SC包装类,用C#编写。该包包含要删除的类 使用系统的 本机PC/SC API。实现部分ISO7816支持。 该库编写为在Windows和Unix(Linux和Mono)上运行,使用 PCSC-Lite)

该项目位于GitHub上:

您也可以在此处查看文档:

对于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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
std::wstring s2ws(const std::string&s);
int main(int argc,char*argv[]){
SCARDCONTEXT上下文=0;
LONG ret=scardesttablishContext(SCARD\u SCOPE\u系统、nullptr、nullptr和context);
如果(ret!=伤痕累累的成功){

std::不可能重复@TFD,这个问题更具体,也应该更容易回答。它提到了一个特定的卡片和读卡器。@Matthew_Flaschen没错,但IIRC Mifare UCR是亚洲的克隆,需要找到到底是什么基本模型。我问的是第一个问题。另外,任何使用Mifare 1k的人都需要仔细阅读!更多信息复制或当前链接: