2015-12-21 6 views
1

Мне нужно получить доступ к информации eID через узел. Для этого я нашел пакет (https://github.com/santigimeno/node-pcsclite), чтобы сделать это. На сайте есть пример, который, кажется, работает (сделать что-то по крайней мере я скопировал следующий код:.Использовать коды eID APDU с узлом pcsclite

#!/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 A5 03 01 01 01 13 11 AD" ваша карта ATR, который, вероятно, является "Бельгия Электронные удостоверения личности". Вы можете проверить ATR с этого сайта

https://smartcard-atr.appspot.com

Для извлечения данных из смарт-карты:

  1. Отправить команду APDU содержит CLA 1 байт, INS 1 байт, P1 1 байт, P2 1 байт, Lc поле, поле данных, поле Le.
  2. Вы получите ответ APDU содержит SW1 1 байт и SW2 1 байт. Вам нужно прочитать руководство, чтобы понять его смысл.
  3. Затем отправить команду ответа прибудет для извлечения данных

В вас так, 69 SW1 86 является SW2. Значение «Команда не допускается (без тока EF)»