我尝试通过C++访问SmartCard.我已经获得了Connection和CardHandle.
但是当我通过SCardTransmit发送APDU命令时,我将从卡中获得6E 00作为答案.无论我发送哪个APDU命令.每次6E 00.
例如:
当我发送带有PC/SC Testtootl的命令"PC/SC Diag"时,同样的事情.
有谁有想法这个错误代码的含义以及如何解决问题?
请帮我 !!!!;-)
我目前正在对多个智能卡读卡器识别进行一些研究和测试,以确定哪个读卡器连接到哪个 USB 端口。
假设我将读卡器 A 插入 USB 端口 1。通过调用 SCardListReaders 函数,我检索以下友好名称:
- ACS ACR1281 1S 双读卡器 PICC 0
然后我将另一个读卡器(读卡器 B)插入 USB 端口 2。现在我有 2 个读卡器连接到同一台 PC。调用 SCardListReaders 会给我:
- ACS ACR1281 1S 双读卡器 PICC 0
- ACS ACR1281 1S 双读卡器 PICC 1
我知道这些名称是如何生成的(PCSC 智能卡读卡器“友好名称”是如何构造的?)并且我知道以不同顺序插入读卡器(先插入读卡器 B,然后插入读卡器 A)将更改 SCARD_ATTR_DEVICE_UNIT影响友好名称。
基于上述场景,如何确保 PC 始终自动连接到 USB 端口 1 中的 PICC 读卡器,无论其友好名称如何?
任何帮助都感激不尽。谢谢。
我已经让这个软件在生产中运行多年,以前从未见过这个问题。我刚收到一台内置Alcor Micro USB 智能卡读卡器的新笔记本电脑 (HP EliteBook 8470p) 。
下面的代码将列出系统上的所有读者,似乎工作正常。我们的某些系统会将 3 或 4 个阅读器插入到一台计算机中。它已经用十几个模型进行了测试,没有任何问题。
奇怪的是,Alcor 读卡器只有在插入智能卡时才会被列出。如果我在设备管理器中查看它,它也不会显示在“智能卡读卡器”下,直到插入卡(除非我转到“查看”>“显示隐藏的设备”)。
有谁知道这是为什么,或者是否有办法确保它列在我的软件中?
谢谢你。
编码:
[DllImport("WINSCARD.DLL", EntryPoint = "SCardEstablishContext", CharSet = CharSet.Unicode, SetLastError = true)]
static internal extern uint EstablishContext(ScopeOption scope, IntPtr reserved1,
IntPtr reserved2, ref SmartcardContextSafeHandle context);
[DllImport("WINSCARD.DLL", EntryPoint = "SCardListReaders", CharSet = CharSet.Unicode, SetLastError = true)]
static internal extern uint ListReaders(SmartcardContextSafeHandle context, string groups,
string readers, ref int size);
private bool EstablishContext()
{
if ((this.HasContext))
{
return true;
}
this._lastErrorCode =
(SmartcardErrorCode)UnsafeNativeMethods.EstablishContext(ScopeOption.System,
IntPtr.Zero, …Run Code Online (Sandbox Code Playgroud) 如果我有 NFC 读取器/写入器设备,我可以让它检测支持 NFC 的 Android 手机,以便我可以将数据从手机传输到设备吗?我在 Stackoverflow 上找到了一些与卡模拟相关的链接,但他们都说卡模拟是不可能的或太难了
如何让安卓手机充当非接触式智能卡?
NFC 卡模拟 Android
Android NFC 手机可以充当 NFC 标签吗?
NFC - p2p 模式方案
NFC Peer2Peer 模式 - Android Beam - ISO 18092
Galaxy Nexus 4.1.1 和 ISO14443 阅读器
但是我在网上找到的一份pdf文件说
卡模拟模式基于 ISO 标准 ISO 14443-A 和 ISO 14443-B,这些标准得到了 NFC 论坛的认可。
而且,还进一步说NFC论坛也认可P2P模式,如果我理解正确的话,这也就像一部手机工作在读卡器仿真模式而另一部工作在卡仿真模式
因此,如果我有一部支持 NFC 的手机和 USB 读/写器,例如THIS ONE,我可以让它将我的手机检测为 NFC 设备并将一些数据从我的手机传输到读/写器吗?
---编辑---
注意:我不是在谈论让手机作为安全支付系统或类似的东西工作,我的问题更基本:如果我发送一些数据(比如一个字符串“ABC”或一些编号 1234)从我的手机使用 NFC,我可以让外部读取器/写入器检测到它吗?
我正在使用该javax.smartcardio软件包开发智能卡相关应用程序.我想发送Pseudo ADPU命令来设置我的阅读器的LED/LCD状态.
我发现将APDU命令发送到读卡器/卡的唯一方法是CardChannel::transmit,但必须在卡上运行.
当读卡器中没有卡时,是否可以发送伪APDU命令?APDU命令怎么样?(使用Java)
所以最近我一直在使用包含一些信息的智能卡,我在这里试图实现的是使用智能卡读卡器通过任何 Android 智能手机从这些智能卡中获取这些数据。我一直在使用HID OMNIKEY 3021 USB智能卡读卡器,它可以读取这些卡(我知道这个读卡器可以通过 Windows 应用程序与这些卡配合使用,因为我已经亲自测试过了)
现在,Android 提供了USB 主机,只要 Android 智能手机支持它,就可以读取任何 USB 主机。
我正在尝试使用 USB 主机提供的这些类来访问此卡内的数据。
我检测任何 USB 主机的代码:
private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);
IntentFilter attachedFilter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED);
registerReceiver(mUsbAttachedReceiver, attachedFilter);
private final BroadcastReceiver mUsbAttachedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Utils.writeStringToTextFile("\n1 .Get an action : " …Run Code Online (Sandbox Code Playgroud) 我正在开发一个JavaScript库,以通过chrome webusb API使用CCID协议执行智能卡操作。当我在Linux和MacOS上插入智能卡读卡器时,一切都会顺利进行,但是当尝试声明该接口时,我却卡在了Windows上。我试图以管理员身份运行chrome,在Windows上禁用智能卡服务/ CCID驱动程序,以防万一有人声称该接口,但是却无济于事。我一直显示“无法声明接口:访问被拒绝(权限不足)”消息。这真的是权限问题吗?还是我不知道阻止某些Windows服务访问?
编辑:我尝试在另一台Mac,读者无法正常工作。从CCID驱动程序info.plist中删除了特定的供应商ID /产品ID之后,我设法使其工作。所以我想在Windows上也会发生同样的问题,一个CCID驱动程序正在“阻塞”访问接口。我有什么选择?
设备描述符:
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1a44 VASCO Data Security International
idProduct 0x0001 Digipass 905 SmartCard Reader
bcdDevice 1.02
iManufacturer 1 VASCO
iProduct 2 DP905v1.1
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 93
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 50mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下命令读取 Visa 信用卡:
00 A4 04 07 A0 00 00 00 03 10 10
Run Code Online (Sandbox Code Playgroud)
但我收到了这个回复
61 2E
Run Code Online (Sandbox Code Playgroud)
我无法理解这个回应,因为 EMV 书 1 说(第 146 页):
6A 81 : command not supported
90 00 or 62 83 command is successfull
Run Code Online (Sandbox Code Playgroud)
关于如何继续进行的任何帮助?我缺少什么?我该怎么办?
谢谢。
尝试在支持NFC Interac Flash的卡上使用标准EMV协议读取借记卡号码.
这是我的交易顺序:
请求1:00A404000E325041592E5359532E444446303100(选择2PAY.SYS.DDF01获取PSE目录)
响应1:6F2C840E325041592E5359532E4444463031A51ABF0C1761154F07A00000027710105007496E74657261638701019000(AID A0000002771010 found,Interac)
请求2:00A4040007A000000277101000(选择AID A0000002771010)
响应2:6F348407A0000002771010A5295007496E74657261638701015F2D02656E9F38159F59039F5A019F02069F1A025F2A029F37049F58016285(选定的AID,响应包括PDOL,请参见下图.
http://i.stack.imgur.com/c9FjM.png
Request3:80A800001583130000990000000000000001240124000001230000(获取处理选项,基于上面的结构)
回应3: 6985 (不允许命令;不满足使用条件.)
我无法通过6985错误; 经过2天的规格阅读和反复试验.
从借记卡(Interac)读取卡号的任何提示/想法/成功案例?正在测试的卡是具有Interac Flash非接触功能的TD借记卡.
非常感谢!
---注意:我可以在没有GET PROCESSING OPTION的情况下从Visa和MasterCard读取卡号.但是因为我在没有GPO的情况下持续获得6985,所以我尝试这样做,但失败了.我真的不需要做GPO,只需要获取卡号和有效期.---
我正在使用CardWerk的SMARTCARD API.
如何(byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF使用APDU 更改默认密钥()?
APDU包括CLASS,INSTRUCTION,P1,P2.我一直在阅读文档,但我无法找到将实际密钥更改为新密钥所需的参数.