智能卡 Java 串行接口





5.00/5 (1投票)
从 Java 获取智能卡生命周期状态。
引言
我撰写这篇文章作为我上一篇题为 “智能卡直接串口接口” 的文章的第二部分。 这篇文章解释了如何与相同的 Phoenix 接口交互,但现在,为了更具教育意义,我将解释如何了解智能卡的个性化阶段。 智能卡通常由不同的公司组装:一家公司制造树脂,另一家公司制造多晶硅芯片,另一家公司安装固件,还有一家公司执行个性化(创建目录和文件结构)。 通常,制造商使用一个历史 ATR 字节来指示卡片所处的阶段。 具体来说,我将在本实验室中使用一个智能卡固件,该固件每次智能卡更改阶段时都会更新 H4(第四个历史字节)。

首先,智能卡处于制造状态,直到创建包含预个性化密钥的文件才会过渡到个性化状态; 这是为了保护固件组装公司与生成文件系统公司之间的物流。
实验室
所需的硬件是我的上一篇文章“智能卡直接串口接口”中描述的 Phoenix 编程器。 现在这个实验室的实现是用 Java 完成的。 因此,它需要 JDK(不低于 1.4)和 Java Communications API; 安装此 API 基本上包括复制一个 jar(comm.jar)、一个 .properties 文件(javax.comm.properties)和一个 DLL(win32com.dll)。 这里有一个关于如何安装和配置它的手册 (http://www.oracle.com/technetwork/java/index-jsp-141752.html)。
Using the Code
该应用程序使用 swing 来绘制应用程序的图形部分。 启动后,它会创建一个专门用于与 RS-232 串口通信的 Thread
。 专门用于串口通信的类名为 CommSerie,SerialPort
对象抽象在 puertoSerie 属性中。 为了将 RTS 线设置为 5V,然后设置为 0V,从而复位智能卡并在大约 40000 个时钟周期后获取 ATR。 接下来,读取串口 I/O 缓冲区,我们得到 ATR 作为 byte[]。 ATR 格式是
-----------------------------------------------
| TS | T0 | TB | H1 || H2 | H3 | H4 | H5 | H6 |
-----------------------------------------------
历史字节是 H1..H6; 在本实验室中,H4 字节(字符串 11-12)包含有关智能卡生命周期阶段的信息。 这是读取它的代码
public void enviaReset(){
// En flanco de bajada inicia el ATR
puertoSerie.setRTS(true);
puertoSerie.setRTS(false);
}
读取后,将其与相应的状态进行比较,映射到 'Constantes
' 接口中。
if (estado.equals(Constantes.ESTADO_FABRICACION))
sol = "Fase de Fabricacion. Imposible personalizar";
else if (estado.equals(Constantes.ESTADO_PREPERSONAL))
sol = "Fase de Pre-Personalización. Se puede Reutilizar";
else if (estado.equals(Constantes.ESTADO_PERSONALZDA))
sol = "Tarjeta Personalizada. No se puede reutilizar";
else if (estado.equals(Constantes.ESTADO_OFFLINE))
sol = "Ponga en tensión el lector e inserte la tarjeta";
else
sol = "Tarjeta en fase desconocida. No se puede reutilizar";
希望你喜欢!!!
历史
- 初稿