第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用APDU讀取和下載ddd行車(chē)記錄儀文件?

如何使用APDU讀取和下載ddd行車(chē)記錄儀文件?

慕尼黑8549860 2021-07-02 17:31:13
我正在嘗試使用javax.smartcardio. 問(wèn)題是我在盲目地做大部分事情,因?yàn)槲艺也坏疥P(guān)于APDU commands.目前,我設(shè)法打印了卡片類(lèi)型 ( card: PC/SC card in HID Global OMNIKEY 3x21 Smart Card Reader 0, protocol T=0, state OK) 并讀取了卡片識(shí)別信息(所選文件0520)。如何下載行駛記錄儀 .ddd 文件?這是到目前為止的代碼:public static void main(String[] args) {        try {            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("T=0");            System.out.println("card: " + card);            CardChannel channel = card.getBasicChannel();            byte[] c1 = hexStringToByteArray(stripCommandSpace("00 A4 04 0C 06 FF544143484F"));            //byte[] c1 = hexStringToByteArray(stripCommandSpace("FF CA 00 00 00"));            ResponseAPDU r1 = channel.transmit(new CommandAPDU(c1));            System.out.println("response: " + byteArrayToHexString(r1.getBytes()));            byte[] c2 = hexStringToByteArray(stripCommandSpace("00 a4 02 0c 02 05 04"));            ResponseAPDU r2 = channel.transmit(new CommandAPDU(c2));            System.out.println("response: " + byteArrayToHexString(r2.getBytes()));            byte[] c3 = hexStringToByteArray(stripCommandSpace("00 B0 00 01 128"));            ResponseAPDU r3 = channel.transmit(new CommandAPDU(c3));            System.out.println("response: " + byteArrayToHexString(r3.getBytes()));            System.out.println("data: " + byteArrayToHexString(r3.getData()));我設(shè)法識(shí)別并讀取了驅(qū)動(dòng)程序活動(dòng)文件 - 我必須將標(biāo)識(shí)符更改為0504如下圖所示:現(xiàn)在我的問(wèn)題是如何將我得到的字節(jié)數(shù)組轉(zhuǎn)換為 .ddd 文件。我在我的代碼的更新版本中嘗試過(guò)(見(jiàn)上文),但 .ddd 閱讀器告訴我文件已損壞(我使用第三方應(yīng)用程序?qū)?.ddd 轉(zhuǎn)換為 .txt - 稱(chēng)為readesm)。
查看完整描述

1 回答

?
慕尼黑的夜晚無(wú)繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

卡驅(qū)動(dòng)中的結(jié)構(gòu)塊:

http://img1.sycdn.imooc.com//60e555ad00013e7505900297.jpg

  1. 結(jié)構(gòu)塊是(ICC,IC,Application_Identificacion ........):

    標(biāo)頭:“文件 2(0501h,0502h ....)字節(jié)”+“類(lèi)型(數(shù)據(jù)-0 或有符號(hào)-1)1 個(gè)字節(jié)”+“長(zhǎng)度 2 個(gè)字節(jié)”+ 數(shù)據(jù)(讀卡):

  2. ICC、IC 和 Card_donwload 不需要簽名,所以 0501 到 0522(不是 050e),簽名塊文件是授權(quán)所必需的,但讀取字節(jié)文件和創(chuàng)建二進(jìn)制文件不需要。

  3. 閱讀 Fid 的遞歸:

 for (Fid fid : Fid.values()) {

    System.out.println(fid.getId());

    // not read 03f00 and 0500 not files

    if(!fid.getId().equals("3f,00") && !fid.getId().equals("05,00")){

        b = readCard(r, channel, fid.getId());

        // header block file

        byte[] htba = OperationHelper.hexToByteAr(fid.getId());

        byte[] sizeByte = ByteBuffer.allocate(4).putInt(b.length).array();

        headerBlock[0] = htba[0];       // id file byte 1

        headerBlock[1] = htba[1];       // id file byte 2

        headerBlock[2] = 0;             // type file data

        headerBlock[3] = sizeByte[2];   // size file byte 1

        headerBlock[4] = sizeByte[3];   // size file byte 2

        try{

            fileTGD.write(headerBlock);

            fileTGD.write(b);

            // add signature file

            if (!fid.getId().equals("00,02") && !fid.getId().equals("00,05")

                    && !fid.getId().equals("C1,00") && !fid.getId().equals("C1,08")

                    && !fid.getId().equals("05,0E")){

                performHashFile(r, channel);

                b = signature(r, channel);

                sizeByte = ByteBuffer.allocate(4).putInt(b.length).array();

                headerBlock[0] = htba[0];

                headerBlock[1] = htba[1];

                headerBlock[2] = 1;

                headerBlock[3] = sizeByte[2];

                headerBlock[4] = sizeByte[3];

                fileTGD.write(headerBlock);

                fileTGD.write(b);

            }

        }catch (Exception e){

            e.printStackTrace();

        }

    }

}

讀取數(shù)據(jù):


public static byte[] readCard( ResponseAPDU r, CardChannel channel, String fid){

ByteArrayOutputStream dataResponseBuffer = new ByteArrayOutputStream();

try {

    //r = channel.transmit(new CommandAPDU(0x00, 0x84, 0x00, 0x00,  OperationHelper.hexToByteAr("6f,07,00,00,00,08,00,00,00,00,00,a4,02,0c,02,05,04")));

    /**

     *  GetParameters

     *

     *  Headers

     *  CLA - 00

     *  INS - A4

     *  P1 - 02

     *  P2 - 0C

     *  DATA - 00,02         //6C,00,00,00,00,08,01,00,00,00

     *  dataOffset - 00

     *  dataLength - length of trama

     *

     */

    //r = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x02, 0x0C,  OperationHelper.hexToByteAr("00,02"), 0x00, 0x02));          

    if (!fid.equals("00,02") && !fid.equals("00,05"))

        //select MF - Only positioning

        r = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x04, 0x0C, OperationHelper.hexToByteAr("ff,54,41,43,48,4f"), 0x00, 0x06));

    // select EF

    r = channel.transmit(new CommandAPDU(0x00, APDUCommand.SELECT_FILE.getCommand(), 0x02, 0x0C, OperationHelper.hexToByteAr(fid), 0x00, 0x02));

    boolean end = true;

    int p1 = 0x00;

    int p2 = 0x00;

    Byte le = Byte.valueOf((byte) 255);

    int size = 0x00;

    do {

        r = channel.transmit(new CommandAPDU(0x00, APDUCommand.READ_BINARY.getCommand(), p1, p2, (le < 0) ? le & 255 : le));

        switch (r.getSW1()) {

            case 0x90:

                dataResponseBuffer.write(r.getData());

                size += (le < 0) ? le.intValue() & 255 : le.intValue();

                byte[] offsetarray = ByteBuffer.allocate(4).putInt(size).array();

                p1 = (offsetarray[2] < 0) ? offsetarray[2] & 255 : offsetarray[2];

                p2 = (offsetarray[3] < 0) ? offsetarray[3] & 255 : offsetarray[3];

                break;

            case 0x67: // dec 103                   

                break;

            // normal process XX = number of bytes for response enabled

            case 0x61:

            /*

             nuevaLong = Byte.valueOf(codigoError[1]);

             */

                break;

            // incorrect parameters (out of EF)

            case 0x6a:

                if (r.getSW2() == 0x86)

                    System.out.println("Parameters P1-P2 incorrects");

                break;

            // incorrect long, sw2 = exact long. If not return field data

            case 0x6c: //dec 108

                //nuevaLong = Byte.valueOf(codigoError[1]);

                if (r.getSW2() == 0x86)

                    System.out.println("Parameter P1-P2 incorrects");

                break;

            case 0x69: //dec 108

                end = false;

                break;

            case 0x6b: //dec 107

                end = false;

                /*

                int div = (le < 0)? le.intValue() & 255: le.intValue() ;

                size -= div;

                le = Byte.valueOf((byte) (div / 2));

                size += le;

                if (le.byteValue() == (byte) 0) {

                    le = Byte.valueOf((byte) 1);

                    end = false;

                }

                offsetarray = ByteBuffer.allocate(4).putInt(size).array();

                 entero = Integer.valueOf(byteArraySize4ToInt(offsetarray) );

                p1 = (offsetarray[2] < 0)? offsetarray[2] & 255: offsetarray[2];

                p2 = (offsetarray[3] < 0)? offsetarray[3] & 255: offsetarray[3];

                */

                break;


            default:

                break;

        }

    } while (end);

} catch (CardException e1) {

    e1.printStackTrace();

} catch (IOException e) {

    e.printStackTrace();

}

return dataResponseBuffer.toByteArray();

}


5.根據(jù)開(kāi)關(guān)內(nèi)部的文檔進(jìn)行錯(cuò)誤處理


查看完整回答
反對(duì) 回復(fù) 2021-07-07
  • 1 回答
  • 0 關(guān)注
  • 206 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)