gpt4 book ai didi

c++ - 如何读取智能卡上的用户数据?

转载 作者:行者123 更新时间:2023-11-30 03:58:01 25 4
gpt4 key购买 nike

首先,我在使用智能卡方面还比较陌生,我不知道数据是如何存储的以及智能卡上的哪些数据受到保护。

我正在尝试读取受 PIN 保护的学生身份智能卡。我一直在使用默认的 Windows 智能卡库 (winscard.lib) 使用 C++ 进行编程。

我已经成功读取了 ATR header ,但据我所知,ATR header 包含有关如何与阅读器通信的信息,而不是用户信息。

我已尝试从卡中读取二进制文件,但 APDU 总是返回 6E 00,表示“不支持类”或“错误指令”。这是代码:

switch(dwProtocol)
{
case SCARD_PROTOCOL_T0:
{
pioSendPci = *SCARD_PCI_T0;
break;
}
case SCARD_PROTOCOL_T1:
{
pioSendPci = *SCARD_PCI_T1;
break;
}
default:
{
printf("Detecting protocol failed!");
printf("Press <ENTER> key to terminate!\n");
nResponse = getchar();
lRet = SCardReleaseContext(hContext);
return -1;
}
}

lRet = SCardTransmit(hCard,
&pioSendPci,
(LPCBYTE)&cmdRead,
sizeof(cmdRead),
NULL,
(LPBYTE)&recvbuffer,
&atrLen);

printf("APDU return code:\n");
printf("=================\n");
for(i=0; i<2; i++)
{
printf("%02X ", recvbuffer[i]);
}
printf("\n");

if(lRet!=SCARD_S_SUCCESS)
{
printf("Transmission failed! ErrorCode = 0x%08X\n",lRet);
printf("Press <ENTER> key to terminate!\n");
nResponse = getchar();
lRet = SCardReleaseContext(hContext);
return -1;
}

其中cmdRead如下:

BYTE cmdRead[] = { 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xFF };

有什么问题吗?我需要先验证卡才能读取二进制文件吗? read binary right函数是读取学号等基础数据吗?

最佳答案

如果卡片上没有学生申请的说明,这是一个漫长而无聊的过程。假设您在卡上有一个文件系统(与 java 卡相对),您需要知道用户数据存储在哪个文件中,以便您可以在发出请求之前选择适当的文件READ BINARY pr READ RECORD 如果它是面向记录的文件。您可以尝试通过反复试验找到正确的文件 ID,但是......请注意,在智能卡上,访问条件的定义粒度非常细,因此可能存在无需任何身份验证即可读取的文件,并且在另一个极端,可能只有在建立安全通道后才能读取文件,以便通过安全消息传递(加密和受 MAC 保护的命令和/或响应)使用。

关于c++ - 如何读取智能卡上的用户数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com