卡不存在时是否可以发送伪APDU命令?

Bru*_*e Z 5 java apdu smartcard pcsc smartcard-reader

我正在使用该javax.smartcardio软件包开发智能卡相关应用程序.我想发送Pseudo ADPU命令来设置我的阅读器的LED/LCD状态.

我发现将APDU命令发送到读卡器/卡的唯一方法是CardChannel::transmit,但必须在卡上运行.

当读卡器中没有卡时,是否可以发送伪APDU命令?APDU命令怎么样?(使用Java)

Bru*_*e Z 3

从http://www.springcard.comSDK for PC/SC中的card-emul 示例中找到了解决方案。这是我的代码:

import java.util.List;

import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.TerminalFactory;

public class TestPcsc {

    public static void main( String[] args ) throws CardException {

        TerminalFactory tf = TerminalFactory.getDefault();
        List< CardTerminal > terminals = tf.terminals().list();
        CardTerminal cardTerminal = (CardTerminal) terminals.get( 0 );

        byte[] command = { (byte) 0xE0, (byte) 0x00, (byte) 0x00, (byte) 0x29, (byte) 0x01, (byte) 0x00 };
        cardTerminal.connect( "DIRECT" ).transmitControlCommand( CONTROL_CODE(), command );

    }

    public static int CONTROL_CODE() {

        String osName = System.getProperty( "os.name" ).toLowerCase();
        if ( osName.indexOf( "windows" ) > -1 ) {
            /* Value used by both MS' CCID driver and SpringCard's CCID driver */
            return (0x31 << 16 | 3500 << 2);
        }
        else {
            /* Value used by PCSC-Lite */
            return 0x42000000 + 1;
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

我认为要点是:

  1. 使用DIRECT协议获取“卡”
  2. 使用Card::transmitControlCommand从 CONTROL_CODE 函数获得的代码的方法(从示例代码复制,不确定理论是什么>_<)