首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java智能卡-阅读Scosta智能卡

Java智能卡-阅读Scosta智能卡
EN

Stack Overflow用户
提问于 2014-03-05 07:42:32
回答 1查看 1.6K关注 0票数 1

我试图通过java 阅读印度政府标准的“Scosta”智能卡,我使用的代码是

代码语言:javascript
复制
package com.example.smartcardreader;

import java.util.List;

import javax.smartcardio.ATR;
import javax.smartcardio.Card;
import javax.smartcardio.CardChannel;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CommandAPDU;
import javax.smartcardio.ResponseAPDU;
import javax.smartcardio.TerminalFactory;

public class SmartCardReader {

 public static void main(String[] args) {

        try{

            // show the list of available terminals
            TerminalFactory factory = TerminalFactory.getDefault();

            List<CardTerminal> terminals = factory.terminals().list();

            System.out.println("Terminals: " + terminals);

            // get the first terminal
            CardTerminal terminal = terminals.get(0);

            // establish a connection with the card
            Card card = terminal.connect("*");
            System.out.println("card: " + card);

            // get the ATR
            ATR atr = card.getATR();
            byte[] baAtr = atr.getBytes();

            System.out.print("ATR = 0x");
            for(int i = 0; i < baAtr.length; i++ ){
                System.out.printf("%02X ",baAtr[i]);
            }

            CardChannel channel = card.getBasicChannel();
            byte[] cmdApduGetCardUid = new byte[]{
                        (byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x00};

            ResponseAPDU respApdu = channel.transmit(
                                                new CommandAPDU(cmdApduGetCardUid));

            if(respApdu.getSW1() == 0x90 && respApdu.getSW2() == 0x00){

                byte[] baCardUid = respApdu.getData();

                System.out.print("Card UID = 0x");
                for(int i = 0; i < baCardUid.length; i++ ){
                    System.out.printf("%02X ", baCardUid [i]);
                }
            }

        card.disconnect(false);

        } catch (CardException e) {
            e.printStackTrace();
        }
    }

}

我正在使用eclipse在Mac机器上进行开发。当我运行这段代码时,它给了我异常,因为它无法读取终端。我有一个USB读卡器,也插入了智能卡到它。你能指出我到底哪里出错了吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-03-05 12:27:32

这可能与您的问题无关,但是在Mac上使用64位版本的javax.smartcardio似乎严重破坏了软件包java7。您可以在这个博客帖子和这个错误报告中找到更多的信息。您还可以查看开源项目[医]心脏,它试图解决javax.smartcardio包的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22191549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档