java智能卡接口_java – 尝试使用智能卡I / O API读取和写入智能卡的字符串

news/2024/11/18 1:44:22/

我正在使用ACS AET65读卡器尝试将字符串存储到智能卡中,然后将其读回.我正在使用智能卡IO API,我可以获得终端并与卡连接.但是,我一直在阅读ISO 7816规范,我真的迷路了.

我需要做的就是给卡写一个3K字符串,然后再读回来.而已.根据我的研究,看起来这些卡应该安装了applet,但我确信必须有一种方法可以只写一个普通的字节数组并将其取回.

我不知道为此构建APDU命令.我尝试了READ BINARY,WRITE BINARY,ERASE BINARY,但我当然做错了.它总是返回0x6E和0x00作为响应的SW1和SW2字节,这意味着错误.这是我用小字符串向applet发送测试命令的部分的一小部分:

Card card = cardTerminal.connect("*");

card.beginExclusive();

System.out.println("Card protocol: "+card.getProtocol());

CardChannel channel = card.getBasicChannel();

String jsonStr = "small test string";

byte[] totalData = new byte[256];

byte[] data = jsonStr.getBytes();

System.arraycopy(data, 0, totalData, 0, data.length);

CommandAPDU eraseCommand = new CommandAPDU(0x00, 0x0E, 0x00, 0x00, data, 0x00);

ResponseAPDU eraseCommandResponse = channel.transmit(eraseCommand);

int eSw1 = eraseCommandResponse.getSW1();

int eSw2 = eraseCommandResponse.getSW2();

// returns 6E00, error

System.out.println("Erase Response SW1: " + toHexString(eSw1) + " and SW2: " + toHexString(eSw2));

CommandAPDU writeCommand = new CommandAPDU(0x00, 0xD0, 0x00, 0x00, data, 0x00);

ResponseAPDU commandResponse = channel.transmit(writeCommand);

int sw1 = commandResponse.getSW1();

int sw2 = commandResponse.getSW2();

// returns 6E00, error

System.out.println("Write Response SW1: " + toHexString(sw1) + " and SW2: " + toHexString(sw2));

byte[] totalReadData = new byte[255];

CommandAPDU readCommand = new CommandAPDU(0x00, 0xB0, 0x00, 0x00, totalReadData, 0);

ResponseAPDU readCommandResponse = channel.transmit(readCommand);

int rSw1 = readCommandResponse.getSW1();

int rSw2 = readCommandResponse.getSW2();

// returns 6E00, error

System.out.println("Read Response SW1: " + toHexString(rSw1) + " and SW2: " + toHexString(rSw2));

byte[] totalReadData2 = readCommandResponse.getData();

// always returns an empty array

System.out.println("Total data read: "+totalReadData2.length);

card.endExclusive();

如何使用智能卡API实现此目的?

谢谢!!

爱德华多

解决方法:

智能卡有各种形式. ISO 7816-4规范规定了基于文件和记录的卡的框架.许多卡和小程序至少在一定程度上符合本规范.

智能卡基本上是片上系统,尽管它们在I / O功能和规格方面通常非常有限.这些智能卡运行操作系统.有时,这些操作系统与应用程序层融合,提供基本的ISO 7816-4功能和文件系统.其他卡仅提供操作系统,该应用程序为应用程序提供API,并为这些应用程序提供加载/执行功能. Java Card就是一个例子;基本上你发送的所有命令APDU都是由Java Card小程序处理的,但Global Platform指定的小程序除外(它负责大多数Java卡上的卡管理和应用程序上传).

有了这些信息,您就会明白只发送任何命令APDU – 包括ERASE BINARY(通常不支持新卡),READ BINARY或UPDATE BINARY APDU – 都不是可行的方法.您需要有关卡的更多信息才能继续,是的,如果您有Java Card实施,则可能需要上传Applet,然后才能发送任何应用程序级别的APDU.

标签:java,smartcard,smartcard-reader

来源: https://codeday.me/bug/20190629/1327468.html


http://www.ppmy.cn/news/527416.html

相关文章

Arduino与RC522读卡测试代码

RC522与Arduino读卡代码 做了Arduino作品集4年多了,让我印象比较深刻的是每当有人用RC522的时候都会遇到同样一个问题,就是为什么我的卡读取不了卡号,我明明是用网上的教程啊?在这里我声明一点,网上的教程不一定是正确…

分享一组开关按钮

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>豆子开关</title><style>* {margin: 0;padding: 0;box-sizing: border-box;-webkit-tap-hi…

Endnote中字体大小怎么改变?

Endnote中看文献字体太小&#xff0c;可以通过以下步骤来放大 1.找到上方工具栏“Edit”下的“Preference” 2.如下图&#xff0c;在“Display Fonts”中点击右侧的“Change Font”就可以改字体啦&#xff01; PS&#xff1a;“Library”只是改变参考文献字体大小&#xff1b;“…

网页转pdf乱码问题,楷体部分出乱码

网页转PDF&#xff0c;一直正常使用&#xff0c;今天突然乱码。。。 以为是网页编码问题。。。最后看了一下处理的后的网页&#xff0c;发现没问题。。。 最后发现是wkhtmltopdf的问题&#xff0c;无法解码楷体网页 删除楷体style后&#xff0c;转化正常 记录一下

psychopy设置中文显示字体 楷体、宋体、微软雅黑

2019独角兽企业重金招聘Python工程师标准>>> 3个要点&#xff1a; 1、使用pygame引擎绘制文本 2、使用字体文件名作为标识&#xff0c;而不是字体名。如msya&#xff1a;微软雅黑&#xff0c;simkai&#xff1a;楷体&#xff0c;simsun&#xff1a;宋体。 3、把字体…

如何在线查看.woff, .ttf 文件里有什么图标

文章目录 如何解决使用步骤 如何解决 使用 百度字体编辑器 就可以在线查看.woff, .ttf 文件里有什么图标&#xff0c;支持对图标进行下载和编辑。这个网站目前是免费使用滴&#xff01; 使用步骤 第一步&#xff0c;打开任意一个.ttf 、.woff 文件&#xff0c;就可以看到文件…

字蛛(font-spider)教学——ttf/otf字体文件压缩

ttf/otf字体文件压缩 第一步、全局安装font-spider第二步、准备好文件夹第三步、在html和css文件中写入代码第四步、压缩 注意&#xff1a; 在压缩前&#xff0c;先获取完整的、包含大多数文字的字体文件 在使用font-spider前&#xff0c;确保自己的电脑已安装node环境 第一步、…

Windows 系统的默认字体是什么?应用的默认字体是什么?

作为中文应用的开发者&#xff0c;我们多半会认为系统的默认字体是“微软雅黑”。然而如果真的产生了这种误解&#xff0c;则很容易在开发本地化应用的时候踩坑。 于是本文带你了解 Windows 系统的默认字体。 本文内容 Windows 10/8.1/8/7/VistaWindows XP 及更早系统 Windows…