问题标签 [pyscard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1196 浏览

python - 智能卡:pyscard 从 apdu 获取剩余字节

我目前可以正确使用 pyscard 与我的智能卡通信,但是当 apdu 大小超过 255 字节时,我需要接收命令的剩余字节。

什么方法可以让我得到 pyscard 中的剩余字节?据我了解 sw2 应该是剩余字节数。

0 投票
1 回答
2511 浏览

python - Pyscard 未能列出读者

我有一个 ACR38 阅读器,我使用 Python2.7。我搜索了使用 python 与读者交流的方法,最后在 这里找到了以下代码

但是当我运行代码时,我收到以下错误:

问:为什么我在libusb-win32 设备下的设备管理器中有阅读器时无法列出阅读器?我应该删除Libusb吗?

0 投票
0 回答
617 浏览

windows - pyscard - windows - 如何重新打开与智能卡的连接(再次打开/关闭/打开)

在 Windows 8.1、Python 2.7、pyscard(latest) 上,我列出了我软件中的阅读器,如下所示:

现在,当我取出智能卡并将其重新插入并尝试使用相同的软件再次打开连接时(我没有同时关闭软件)我收到此错误:

相反,如果我关闭软件并重新列出阅读器并打开连接,一切正常。

显然,如果智能卡被移除并重新插入,Windows 会做一些事情,这会阻止建立新的连接。

谁能告诉我忍者之道?谢谢你。

0 投票
2 回答
1584 浏览

python-2.7 - 如何从 HID omnilkey 获取智能卡的 ATR

我想获得智能卡的 ATR。我正在使用 HID omnikey 5321。我正在关注此链接“ http://pyscard.sourceforge.net/user-guide.html#requesting-any-card

到目前为止,我已经尝试过:

我在

错误如:

0 投票
3 回答
2478 浏览

python - 每个类的 APDU 6E00 状态

我是 APDU 和智能卡通信的新手,我不知道如何成功发送 APDU 命令。例如,当我尝试此命令时:

我得到6E 00回应。我试图弄清楚我必须为我的卡使用哪个类,但是对于我在 range 中尝试的每个类00-FF,我总是得到“不支持的类”错误。

我认为这可能与卡中的某些身份验证有关,但我不知道如何正确执行此操作。

我使用了以下 Python (pyscard) 代码:

编辑: 卡的 ATR 是3B 04 49 32 43 2E

0 投票
1 回答
4124 浏览

python - 如何使用 pyscard 列出智能卡上的文件

我必须从智能卡中读出一个文件。该卡由监控车辆运动的数字行驶记录仪写入。我可以使用 psycard ( http://pyscard.sourceforge.net/user-guide.html )连接到智能卡读卡器,但是我不知道如何列出卡上的文件以及如何下载它们。我正在挖掘 ISO 标准,看起来我必须使用 ISO/IEC 7816 标准和专用文件(http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_5_basic_organizations.aspx)但我不知道如何从 pyscard 做吗?

已经有一些程序(例如:http ://en.tachoterminal.net/products/tachoterminal-reader/ )做同样的事情,但它们是独立的程序。我需要将此功能集成到另一个软件中。

我不知道要使用哪种协议。有人能帮帮我吗?

0 投票
3 回答
6433 浏览

smartcard - 扩展 APDU 和 T=0/1 通信协议

我有一个 JCOP V2.4.2 R3 java 卡,它在其数据表“该卡同时支持T=1T=0通信协议”中提到

我还有一个 ACR38 智能卡读卡器,它支持 T=0 和 T=1 协议。(我与一张卡成功T=0通信,与这张卡成功T=1通信。)

我编写了以下程序并将其上传到卡上以发送和接收扩展 APDU:

在 CAD 方面,我使用 python 脚本将不同的 APDU 发送到卡。问题是:

1-为什么我无法使用 T=0 协议开始通信(虽然提到卡支持此协议):

蟒蛇脚本:

输出:

2-为什么卡不能在 T=1 协议的扩展形式中使用 Select APDU 命令正常工作:

蟒蛇脚本:

输出 :

我想我误解了这个概念,我将扩展 APDU 与T=1协议混为一谈T=0

每个T=1兼容的智能卡,都可以发送和接收扩展 APDU 吗?我们不能通过T=0协议发送和接收扩展的 APDU?如果我们想向安全域发送扩展的 SELECT APDU 命令,SD 必须实现ExtendedLength接口吗?

对于扩展 APDU 传输有什么要求?

  1. AT=1 兼容读卡器
  2. AT=1 兼容智能卡
  3. 一个实现ExtendedLength接口的小程序

这样对吗?

T=0/1我对智能卡中的扩展兼容性和兼容性感到非常困惑。任何光线都会受到赞赏。

请注意,我可以使用协议成功地将扩展 APDU 发送到上述小程序T=1

0 投票
1 回答
1072 浏览

python - Python 中的“EstablishContextException”错误

我已经下载了 Python-2.7pyscard-1.7.0.win32-py2.7并将它们安装在我的计算机上,以便在我的 Windows-7 中使用我的 ACR122U 智能卡读卡器。

之后,我编写了以下程序:

当我想运行程序时,我收到以下错误:

怎么了?

0 投票
0 回答
650 浏览

python - 从 pyscard 调用的 JavaCard 加密和解密函数

我有一个 java 卡小程序,它使用 RSA PKCS#1 和密钥 CRT(中国剩余定理)1024 实现加密和解密。下面是我的一些代码:

构造函数:

加密功能(java卡):

解密函数(java卡):

从下面的 python 代码调用的解密和加密函数(使用包 pyscard),它适用于 encrypt。但是,每次我尝试调用解密函数时都会出错(响应 sw1 = 6F 和 sw2 = 00) 。

加密调用者(python/pyscard)(函数 0x41):

解密调用者(python/pyscard)(函数 0x42):

问题:

  1. 当我试图找到问题时,我发现问题出在解密函数(java 卡)中的 cipher.doFinal() 上。但我仍然不知道 cipher.doFinal() 中错误的原因。有人可以帮我解决这个解密问题吗?
  2. 我尝试使用扩展小程序,但无法在 python/pyscard 中传递超过 255 个字节的数据。有人可以帮助我并指导我如何从 python/pyscard 传递长度超过 255 个字节的数据吗?
  3. 通过 APDU 可以发送的最大数据大小是多少?据我所知,扩展的 APDU 可以接收 65535 字节的数据,但是当我尝试从 python/pyscard 发送 59904 字节的数据时,它给了我这样的错误:

错误3:

谢谢你,很抱歉这个问题很长,新手在这里。

0 投票
2 回答
13909 浏览

javacard - 如何在没有卡的情况下向智能卡读卡器(而不是智能卡)发送命令?

前言:

我有一个双接口智能卡读卡器,它具有一些扩展功能(除了向卡发送 APDU 命令和接收 APDU 响应)。

例如,在其文档中提到您可以使用以下命令获取阅读器的固件版本:

GET_FIRMWARE_VERSION: FF 69 44 42 05 68 92 00 05 00

在其工具中,有一个用于此功能的按钮,并且可以正常工作:

在此处输入图像描述

我什至嗅探了 USB 端口,看看我的 PC 和我的阅读器之间的连接中究竟交换了什么来实现这个功能:

命令: 在此处输入图像描述

回复: 在此处输入图像描述

问题:

我想使用其他工具或通过代码获取我的读卡器版本(并且可能发送其他扩展命令),但我必须在读卡器中插入一张卡才能发送命令,否则我会收到No Card Present异常,而我不想向卡发送命令!(读卡器工具成功响应 GET_FIRMWARE_VERSION 读卡器插槽中没有任何可用卡)

到目前为止我做了什么:

1.我尝试了一些工具,包括OpenSCToolPyAPDUTool和另一个读者的工具。2.我编写了以下python脚本来发送扩展命令。

输出:

但两者都有提到的问题!

问题:

1-如何在没有可用卡的情况下向读卡器发送扩展命令?

2- 为什么我在嗅探数据中看不到命令​​头?(请注意,由于标头是所有扩展命令的预先指定的固定值,我认为阅读器工具不会使用 GET_FIRMWARE_VERSION 命令发送标头,它只发送数据!但它是如何工作的?)


更新:

通过反复试验,我发现了一些有用的东西。

假设:

  • 伪 APDU 固定标头 =FF 69 44 42
  • GET_READER_FIRMWARE_VERSION 的伪 APDU 数据字段 =68 92 00 04 00
  • CHANGE_SAM_SLOT 的伪 APDU 数据字段 = 68 92 01 00 03 XX 00 00 (我的阅读器有两个 SAM 插槽,所以XX可以是0102
  • 选择 APDU 命令 =00 A4 04 00 00

好的,我编写了以下 Java 程序:

在上面的程序中,我可以使用connection.transmitControlCommandcardChannel.transmit()方法向我的阅读器发送命令。关键是,使用第一种方法发送给阅读器的所有命令都假定为 Pseudo-APDU 命令,我不应该为它们使用 Psedo-APDU 标头!并且所有使用第二种方法发送给阅读器的命令都被假定为常规 APDU 命令,所以如果我需要通过第二种方法发送 Pseudo-APDU 命令,我必须向它添加 Pseudo-APDU 标头。

让我们看看非接触式阅读器的输出:

还是有什么问题吗?

是的,有两个问题!:

1-上述程序仅在第一次运行时工作正常。我的意思是,如果我停止运行并重新运行它,第二种方法会引发异常:

正如您在上面看到的,我不能再使用第二种方法了,我需要关闭阅读器并再次打开它以使其再次正常工作。

2-联系界面(我的意思是SAM阅读器)总是抛出以前的异常!我的意思是第二种方法根本不起作用(第一次运行,第二次和第三次都没有......)

请注意,我尝试了不同的阅读器,似乎不仅限于此阅读器。一些 ACS 阅读器在重新运行时也有类似或完全相同的问题

有人有什么主意吗?

作为一个附带问题,Python 是否有任何相同的方法可以像 Java 一样发送 Pseudo-APDU?

connection.transmitControlCommand最后,从Reader的角度来看,和cardChannel.transmit()方法有什么区别?