2016-05-31 151 views
1

皆さん、こんにちは皆さん、スマートカードの書き方についてお聞きしたいと思います。私は、ドキュメントに示されている例に頼っていますが、読み取りタグしか持っていません。 私はhttps://github.com/danm-de/pcsc-sharp/blob/master/Examples/Transmit/Program.csC# - PCSC-Sharpを使用してスマートカードに書き込む

using System; 
using PCSC; 
using PCSC.Iso7816; 

namespace Transmit 
{ 
    public class Program 
    { 
     public static void Main() { 
      using (var context = new SCardContext()) { 
       context.Establish(SCardScope.System); 

       var readerNames = context.GetReaders(); 
       if (readerNames == null || readerNames.Length < 1) { 
        Console.WriteLine("You need at least one reader in order to run this example."); 
        Console.ReadKey(); 
        return; 
       } 

       var readerName = ChooseRfidReader(readerNames); 
       if (readerName == null) { 
        return; 
       } 

       using (var rfidReader = new SCardReader(context)) { 

        var sc = rfidReader.Connect(readerName, SCardShareMode.Shared, SCardProtocol.Any); 
        if (sc != SCardError.Success) { 
         Console.WriteLine("Could not connect to reader {0}:\n{1}", 
          readerName, 
          SCardHelper.StringifyError(sc)); 
         Console.ReadKey(); 
         return; 
        } 

        var apdu = new CommandApdu(IsoCase.Case2Short, rfidReader.ActiveProtocol) { 
         CLA = 0xFF, 
         Instruction = InstructionCode.GetData, 
         P1 = 0x00, 
         P2 = 0x00, 
         Le = 0 // We don't know the ID tag size 
        }; 

        sc = rfidReader.BeginTransaction(); 
        if (sc != SCardError.Success) { 
         Console.WriteLine("Could not begin transaction."); 
         Console.ReadKey(); 
         return; 
        } 

        Console.WriteLine("Retrieving the UID .... "); 

        var receivePci = new SCardPCI(); // IO returned protocol control information. 
        var sendPci = SCardPCI.GetPci(rfidReader.ActiveProtocol); 

        var receiveBuffer = new byte[256]; 
        var command = apdu.ToArray(); 

        sc = rfidReader.Transmit(
         sendPci,   // Protocol Control Information (T0, T1 or Raw) 
         command,   // command APDU 
         receivePci,   // returning Protocol Control Information 
         ref receiveBuffer); // data buffer 

        if (sc != SCardError.Success) { 
         Console.WriteLine("Error: " + SCardHelper.StringifyError(sc)); 
        } 

        var responseApdu = new ResponseApdu(receiveBuffer, IsoCase.Case2Short, rfidReader.ActiveProtocol); 
        Console.Write("SW1: {0:X2}, SW2: {1:X2}\nUid: {2}", 
         responseApdu.SW1, 
         responseApdu.SW2, 
         responseApdu.HasData ? BitConverter.ToString(responseApdu.GetData()) : "No uid received"); 

        rfidReader.EndTransaction(SCardReaderDisposition.Leave); 
        rfidReader.Disconnect(SCardReaderDisposition.Reset); 

        Console.ReadKey(); 
       } 
      } 
     } 

     private static string ChooseRfidReader(string[] readerNames) { 
      // Show available readers. 
      Console.WriteLine("Available readers: "); 
      for (var i = 0; i < readerNames.Length; i++) { 
       Console.WriteLine("[" + i + "] " + readerNames[i]); 
      } 

      // Ask the user which one to choose. 
      Console.Write("Which reader is an RFID reader? "); 
      var line = Console.ReadLine(); 
      int choice; 

      if (!(int.TryParse(line, out choice)) || (choice < 0) || (choice > readerNames.Length)) { 
       Console.WriteLine("An invalid number has been entered."); 
       Console.ReadKey(); 
       return null; 
      } 

      return readerNames[choice]; 
     } 
    } 
} 

ここで例に従ってください私は、ドキュメントを読んで、私は完全にどのようにデータを書き込むCommandAdpuにに理解することはできません。誰かがスマートカードに書き込む方法に関するコードスニペットを私に提供できるのであれば、私は喜んで感謝します。どうもありがとうございました!何かを始める前に

https://danm.de/docs/pcsc-sharp/

+0

あなたが探しているものは? – Arjun

+0

こんにちは。私はスマートカードにスマートカードリーダーを使ってPCSCシャープを使ってデータを書き込む方法に関するコードスニペットを探していました。どうもありがとうございました。 –

+0

あなたはあなたが持っているコードでカードを読んで成功しましたか?最後にプロジェクトpcsc-sharpを構築/実行しましたか? – Arjun

答えて

1

、あなたは文書にHere.

を取得し、任意のAPDUツールによってカードと通信しようとすることができ、最初のMifareカードについてお読みください。

このようなツールがない場合は、pyApduToolを使用してカードにコマンドを送信できます。

あなたがSCMリーダーを持っているなら、This文書はMifareクラシックカードに送る必要があるコマンドについて理解するのに役立ちます。

また、thisにチェックを入れ、他のMifareトピックを検索してMifareカードについて学んでください。これらすべてのリンクを使用すると、Mifareカードの書き込み/読み取りにどのコマンドを送信する必要があるのか​​を知ることができます。また、APDU /コマンドについて知っていれば、コードでMifareを読み込んだ。あなたのコードで書き込みコマンドを置き換え、すべてがうまくいけば、あなたが探しているように書くことができます。

希望します..

+0

より重要なリンクが壊れていて、基本的に「google it」と「read about」と同じであるため、Downvoted。 – BrainSlugs83

関連する問題