2015-12-21 36 views
1

我需要通過節點訪問eID信息。爲此我找到了一個包(https://github.com/santigimeno/node-pcsclite)來做到這一點。該網站有這似乎工作的例子(做什麼ATLEAST 我已經複製下面的代碼:使用節點pcsclite的eID APDU代碼

#!/usr/bin/env node 

var pcsc = require('pcsclite'); 

var pcsc = pcsc(); 
pcsc.on('reader', function(reader) { console.log('New reader detected', reader.name); 

reader.on('error', function(err) { 
    console.log('Error(', this.name, '):', err.message); 
}); 

reader.on('status', function(status) { 
    console.log('Status(', this.name, '):', status); 
    /* check what has changed */ 
    var changes = this.state^status.state; 
    if (changes) { 
     if ((changes & this.SCARD_STATE_EMPTY) && (status.state & this.SCARD_STATE_EMPTY)) { 
      console.log("card removed");/* card removed */ 
      reader.disconnect(reader.SCARD_LEAVE_CARD, function(err) { 
       if (err) { 
        console.log(err); 
       } else { 
        console.log('Disconnected'); 
       } 
      }); 
     } else if ((changes & this.SCARD_STATE_PRESENT) && (status.state & this.SCARD_STATE_PRESENT)) { 
      console.log("card inserted");/* card inserted */ 
      reader.connect({ share_mode : this.SCARD_SHARE_SHARED }, function(err, protocol) { 
       if (err) { 
        console.log(err); 
       } else { 
        console.log('Protocol(', reader.name, '):', protocol); 
        console.log('info : ' , reader) 
        reader.transmit(new Buffer([0x00, 0xB0, 0x00, 0x00, 0x20]), 40, protocol, function(err, data) { 
         if (err) { 
          console.log(err); 
         } else { 
          console.log('Data received', data); 
          reader.close(); 
          pcsc.close(); 
         } 
        }); 
       } 
      }); 
     } 
    } 
}); 



reader.on('end', function() { 
     console.log('Reader', this.name, 'removed'); 
    }); 
}); 

    pcsc.on('error', function(err) { 
     console.log('PCSC error', err.message); 
    }); 

我然後導航到該目錄,並使用節點+「文件名」,它給了我下面的輸出:

output

至於我可以告訴它是這部分(APDU代碼):

reader.transmit(new Buffer([0x00, 0xB0, 0x00, 0x00, 0x20]) 

,這將使我有一些信息。

我需要一些關於所有這些的文檔,特別是我可以使用的APDU列表;例如APDU讀取eID圖片。

我已經用我目前能想到的每個關鍵字進行搜索,並且沒有找到任何有用的東西。真的希望有人能指出我正確的方向。

回答

0

您可以閱讀本網站以瞭解有關智能卡及其工作原理的更多信息。我不是這件事的專家,但網站幫助我很多。

http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_5_basic_organizations.aspx

「3B 98 13 40 0A 03 A5 01 01 01 13 AD 11」 是您的卡ATR這可能是 「比利時電子ID卡」。你可以從這個網站查詢ATR

https://smartcard-atr.appspot.com

爲了取回智能卡數據:

  1. 發送命令APDU包含CLA 1個字節,INS 1個字節,P1 1個字節,P2 1個字節,LC領域,數據領域,樂場。
  2. 您將得到響應APDU包含SW1 1個字節和SW2 1個字節。您需要閱讀手冊以瞭解其含義。
  3. 然後發送GET響應命令來檢索數據

在你的情況下,69 SW1 86 SW2。其含義是「命令不允許(沒有當前EF)」