Advertisement
Guest User

Untitled

a guest
Jan 24th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.61 KB | None | 0 0
  1. namespace Karty_Chipowe
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         public Form1()
  6.         {
  7.             InitializeComponent();
  8.         }
  9.    
  10.         static void CheckErr(SCardError err)
  11.         {
  12.             if (err != SCardError.Success)
  13.                 throw new PCSCException(err,SCardHelper.StringifyError(err));
  14.         }
  15.  
  16.         void readCard()
  17.         {
  18.             //Kontekst.
  19.             var context = new SCardContext();
  20.            
  21.             //Połączenie.
  22.             context.Establish(SCardScope.System);
  23.                
  24.             //Pobranie czytników.
  25.             var readerNames = context.GetReaders();
  26.             if (readerNames == null || readerNames.Length < 1)
  27.             {
  28.                 textBox1.Text += "Nie wykryto czytnika."+"\r\n";
  29.                 return;
  30.             }
  31.             else
  32.             {
  33.                 textBox1.Text += "Wykryto czytnik.\n"+"\r\n";
  34.             }
  35.             //Wybranie czytnika.
  36.             var readerName = readerNames[0];
  37.             if (readerName == null)
  38.             {
  39.                 textBox1.Text += "Nie można wybrać czytnika." + "\r\n";
  40.                 return;
  41.             }
  42.             else
  43.             {
  44.                 textBox1.Text += "Czytnik wybrany" + "\r\n";
  45.             }
  46.  
  47.             var rfidReader = new SCardReader(context);
  48.  
  49.             var sc = rfidReader.Connect(readerName, SCardShareMode.Shared, SCardProtocol.Any);
  50.             if (sc != SCardError.Success)
  51.             {
  52.                 textBox1.Text += "Nie mozna polaczyc sie z czytnikiem" + readerName + SCardHelper.StringifyError(sc) + "\r\n";
  53.                 return;
  54.             }
  55.             else
  56.             {
  57.                 textBox1.Text += "Polaczono z czytnikiem."+"\r\n";
  58.             }
  59.             //Transakcja
  60.             sc = rfidReader.BeginTransaction();
  61.             if (sc != SCardError.Success)
  62.             {
  63.                 textBox1.Text += "Nie mozna rozpoczac transkacji."+"\r\n";
  64.                 return;
  65.             }
  66.             else
  67.             {
  68.                 textBox1.Text += "Transakcja rozpoczeta " + "\r\n";
  69.             }
  70.  
  71.             var receivePci = new SCardPCI();
  72.             var sendPci = SCardPCI.GetPci(rfidReader.ActiveProtocol);
  73.  
  74.             var receiveBuffer = new byte[256];
  75.             //  A0 20 00 01 08 31 31 31 31 FF FF FF FF (VERIFY CHV)
  76.             var VERIFY_CHV = new byte[] { 0xA0, 0x20, 0x00, 0x01, 0x08, 0x30, 0x36, 0x37, 0x38, 0xFF, 0xFF, 0xFF, 0xFF };
  77.             sc = rfidReader.Transmit(sendPci, VERIFY_CHV, receivePci, ref receiveBuffer);
  78.             CheckErr(sc);
  79.            
  80.             textBox2.Text += ("Odpowiedz (VERIFY_CHV): ");
  81.             for (int i = 0; i < receiveBuffer.Length; i++)
  82.                 textBox2.Text += String.Format("{0:X2}", receiveBuffer[i]);
  83.  
  84.             textBox2.Text += "\r\n";
  85.  
  86.             receiveBuffer = new byte[256];
  87.             // Send select telecom
  88.             // A0 A4 00 00 02 7F 10
  89.             var SELECT_TELECOM = new byte[] { 0xA0, 0xA4, 0x00, 0x00, 0x02, 0x7F, 0x10 };
  90.             sc = rfidReader.Transmit(sendPci, SELECT_TELECOM, receivePci, ref receiveBuffer);
  91.             CheckErr(sc); // poprawka
  92.  
  93.             textBox2.Text +="Odpowiedz na Select Telekom: ";
  94.             for (int i = 0; i < receiveBuffer.Length; i++)
  95.                 textBox2.Text += String.Format("{0:X2}", receiveBuffer[i]);
  96.  
  97.             textBox2.Text += "\r\n";
  98.  
  99.             receiveBuffer = new byte[256];
  100.             // GET_RESPONSE
  101.             var GET_RESPONSE = new byte[] { 0xA0, 0xC0, 0x00, 0x00, 0x16 };
  102.             sc = rfidReader.Transmit(sendPci, GET_RESPONSE, receivePci, ref receiveBuffer);
  103.             CheckErr(sc);
  104.  
  105.             textBox2.Text += "Odpowiedz na GET_RESPONSE: ";
  106.             for (int i = 0; i < receiveBuffer.Length; i++)
  107.                 textBox2.Text += String.Format("{0:X2}", receiveBuffer[i]);
  108.  
  109.             textBox2.Text += "\r\n";
  110.  
  111.             receiveBuffer = new byte[256];
  112.             // A0 A4 00 00 02 6F 3C SELECT SMS
  113.             var SELECT_SMS = new byte[] { 0xA0, 0xA4, 0x00, 0x00, 0x02, 0x6F, 0x3C };
  114.             sc = rfidReader.Transmit(sendPci, SELECT_SMS, receivePci, ref receiveBuffer);
  115.             CheckErr(sc);
  116.  
  117.             textBox2.Text += ("Odpowiedz na Select sms: \n");
  118.             for (int i = 0; i < receiveBuffer.Length; i++)
  119.                 textBox2.Text += String.Format("{0:X2}", receiveBuffer[i]);
  120.  
  121.             textBox2.Text += "\r\n";
  122.  
  123.             receiveBuffer = new byte[256];
  124.             // GET RESPONSE
  125.             GET_RESPONSE = new byte[] { 0xA0, 0xC0, 0x00, 0x00, 0x0F };
  126.             sc = rfidReader.Transmit(sendPci, GET_RESPONSE, receivePci, ref receiveBuffer);
  127.             CheckErr(sc);
  128.  
  129.             textBox2.Text += "Odpowiedz: ";
  130.             for (int i = 0; i < receiveBuffer.Length; i++)
  131.                 textBox2.Text += String.Format("{0:X2}", receiveBuffer[i]);
  132.  
  133.             textBox2.Text += "\r\n";
  134.  
  135.             receiveBuffer = new byte[256];
  136.             // READ RECORDS:
  137.             // A0 B2 01 04 B0 READ RECORD number 01, absolute mode, 176 bytes, 0xB0
  138.             string s = "";
  139.             var READ_RECORD01 = new byte[] { 0xA0, 0xB2, 0x01, 0x04, 0xB0 };
  140.             sc = rfidReader.Transmit(sendPci, READ_RECORD01, receivePci, ref receiveBuffer);
  141.             //CheckErr(sc);
  142.  
  143.             textBox3.Text += ("\r\nMessage: \n");
  144.             for (int i = 0; i < receiveBuffer.Length; i++)
  145.                 s += String.Format("{0:X2}", receiveBuffer[i]);
  146.  
  147.             textBox3.Text += s + "\r\n";
  148.             var apdu = new CommandApdu(IsoCase.Case2Short, rfidReader.ActiveProtocol);
  149.             var command = apdu.ToArray();
  150.             String s2 = "";
  151.             receiveBuffer = new byte[256];
  152.             var READ_RECORD02 = new byte[] { 0xA0, 0xB2, 0x02, 0x04, 0xB0 };
  153.             command = READ_RECORD02.ToArray();
  154.             sc = rfidReader.Transmit(sendPci, command, receivePci, ref receiveBuffer);
  155.             CheckErr(sc);
  156.  
  157.             textBox3.Text += ('\n' + "Message: \n");
  158.             for (int i = 0; i < receiveBuffer.Length; i++)
  159.                 s2 += String.Format("{0:X2}", receiveBuffer[i]);
  160.  
  161.             textBox3.Text += s2 + '\n';
  162.  
  163.  
  164.  
  165.             // zakonczenie transakcji
  166.             rfidReader.EndTransaction(SCardReaderDisposition.Leave);
  167.        
  168.         // odlaczenie karty
  169.         rfidReader.Disconnect(SCardReaderDisposition.Reset);
  170.         }
  171.  
  172.         private void button1_Click_1(object sender, EventArgs e)
  173.         {
  174.             readCard();
  175.         }
  176.  
  177.         private void label2_Click(object sender, EventArgs e)
  178.         {
  179.  
  180.         }
  181.     }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement