Ejemplo n.º 1
0
        public static void init()
        {
            try
            {
                string reader = "/dev/ttyS0";
                rfidHat = new Pn532(reader);
                byte[] readUid = null;
                readUid = rfidHat.ListPassiveTarget(MaxTarget.One, TargetBaudRate.B106kbpsTypeA);
                Thread.Sleep(200);

                do
                {
                    var decrypted = rfidHat.TryDecode106kbpsTypeA(readUid.AsSpan().Slice(1));
                    var uid       = BitConverter.ToString(decrypted.NfcId);
                    Console.WriteLine("Unique User ID:  " + uid);
                    rfidHat.ReleaseTarget(1);
                    close();
                    break;
                }while(readUid != null);

                close();
            }

            catch (System.Exception)
            { init(); }
        }
Ejemplo n.º 2
0
        // NOTE: This section is not tested! I'm including it as a possible approach.
        private async Task RFIDHardwareManager(CancellationToken cancelToken)
        {
            while (!cancelToken.IsCancellationRequested)
            {
                rfidHat = new Pn532(reader);
                byte[] retData = null;
                retData = rfidHat.ListPassiveTarget(MaxTarget.One, TargetBaudRate.B106kbpsTypeA);
                Thread.Sleep(200);

                do
                {
                    var decrypted = rfidHat.TryDecode106kbpsTypeA(retData.AsSpan().Slice(1));
                    var uid       = BitConverter.ToString(decrypted.NfcId);
                    rfidHat.ReleaseTarget(1);
                    close();
                    Console.WriteLine("Unique User ID:  " + uid);
                    SendRFIDEvent(uid);
                    break;
                }while(retData != null);
                // Give time to PN532 to process
                rfidHat.Dispose();
                Thread.Sleep(1000);
            }
        }
Ejemplo n.º 3
0
        public static void WriteCode()
        {
            // Creating the device class through serial: /dev/ttyS0
            try
            {
                string device    = "/dev/ttyS0";
                var    reader    = new Pn532(device);
                byte[] writeUser = null;
                writeUser = reader.ListPassiveTarget(MaxTarget.One, TargetBaudRate.B106kbpsTypeA);
                Thread.Sleep(200);

                do
                {
                    var decrypted = reader.TryDecode106kbpsTypeA(writeUser.AsSpan().Slice(1));
                    var uid       = BitConverter.ToString(decrypted.NfcId);

                    Console.WriteLine("Enter Username:");
                    var    userName  = Console.ReadLine();
                    byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(userName);
                    byte[] cardData  = null;
                    reader.Transceive(1, byteArray, cardData);


                    MifareCard mifareCard = new MifareCard(reader, decrypted.TargetNumber)
                    {
                        BlockNumber = 0, Command = MifareCardCommand.AuthenticationA
                    };
                    mifareCard.SetCapacity(decrypted.Atqa, decrypted.Sak);
                    mifareCard.SerialNumber = decrypted.NfcId;
                    mifareCard.KeyA         = new byte[6] {
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                    };
                    mifareCard.KeyB = new byte[6] {
                        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
                    };

                    for (byte block = 0; block < 1; block++)
                    {
                        mifareCard.BlockNumber = block;
                        mifareCard.Command     = MifareCardCommand.AuthenticationB;
                        var ret = mifareCard.RunMifiCardCommand();
                        if (ret < 0)
                        {
                            // Try another one
                            mifareCard.Command = MifareCardCommand.AuthenticationA;
                            ret = mifareCard.RunMifiCardCommand();
                        }

                        if (ret == 1)
                        {
                            mifareCard.BlockNumber = block;
                            mifareCard.Command     = MifareCardCommand.Write16Bytes;

                            ret = mifareCard.RunMifiCardCommand();
                            Console.WriteLine(BitConverter.ToString(cardData));
                            continue;
                        }
                    }

                    reader.ReleaseTarget(1);
                    break;
                }while(writeUser != null);
            }

            catch (System.Exception)
            {
                WriteCode();
            }
        }
Ejemplo n.º 4
0
        private static void ReadMiFare(Pn532 pn532)
        {
            byte[] retData = null;
            while ((!Console.KeyAvailable))
            {
                retData = pn532.ListPassiveTarget(MaxTarget.One, TargetBaudRate.B106kbpsTypeA);
                if (retData != null)
                {
                    break;
                }

                // Give time to PN532 to process
                Thread.Sleep(200);
            }

            if (retData == null)
            {
                return;
            }

            var decrypted = pn532.TryDecode106kbpsTypeA(retData.AsSpan().Slice(1));

            if (decrypted != null)
            {
                Console.WriteLine(
                    $"Tg: {decrypted.TargetNumber}, ATQA: {decrypted.Atqa} SAK: {decrypted.Sak}, NFCID: {BitConverter.ToString(decrypted.NfcId)}");
                if (decrypted.Ats != null)
                {
                    Console.WriteLine($", ATS: {BitConverter.ToString(decrypted.Ats)}");
                }

                MifareCard mifareCard = new MifareCard(pn532, decrypted.TargetNumber)
                {
                    BlockNumber = 0, Command = MifareCardCommand.AuthenticationA
                };
                mifareCard.SetCapacity(decrypted.Atqa, decrypted.Sak);
                mifareCard.SerialNumber = decrypted.NfcId;
                mifareCard.KeyA         = new byte[6] {
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                };
                mifareCard.KeyB = new byte[6] {
                    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
                };
                for (byte block = 0; block < 64; block++)
                {
                    mifareCard.BlockNumber = block;
                    mifareCard.Command     = MifareCardCommand.AuthenticationB;
                    var ret = mifareCard.RunMifiCardCommand();
                    if (ret < 0)
                    {
                        // Try another one
                        mifareCard.Command = MifareCardCommand.AuthenticationA;
                        ret = mifareCard.RunMifiCardCommand();
                    }

                    if (ret >= 0)
                    {
                        mifareCard.BlockNumber = block;
                        mifareCard.Command     = MifareCardCommand.Read16Bytes;
                        ret = mifareCard.RunMifiCardCommand();
                        if (ret >= 0)
                        {
                            Console.WriteLine($"Bloc: {block}, Data: {BitConverter.ToString(mifareCard.Data)}");
                        }
                        else
                        {
                            Console.WriteLine(
                                $"Error reading bloc: {block}, Data: {BitConverter.ToString(mifareCard.Data)}");
                        }

                        if (block % 4 == 3)
                        {
                            // Check what are the permissions
                            for (byte j = 3; j > 0; j--)
                            {
                                var access = mifareCard.BlockAccess((byte)(block - j), mifareCard.Data);
                                Console.WriteLine($"Bloc: {block - j}, Access: {access}");
                            }

                            var sector = mifareCard.SectorTailerAccess(block, mifareCard.Data);
                            Console.WriteLine($"Bloc: {block}, Access: {sector}");
                        }
                    }
                    else
                    {
                        Console.WriteLine($"Autentication error");
                    }
                }
            }
        }
Ejemplo n.º 5
0
        static void ReadMiFare(Pn532 pn532)
        {
            byte[] retData = null;
            while ((!Console.KeyAvailable))
            {
                retData = pn532.ListPassiveTarget(MaxTarget.One, TargetBaudRate.B106kbpsTypeA);
                //retData = pn532.AutoPoll(2, 300, new PollingType[] { PollingType.DepActive106kbps, PollingType.DepPassive106kbps, PollingType.GenericPassive106kbps, PollingType.InnovisionJewel, PollingType.MifareCard, PollingType.Passive106kbps, PollingType.Passive106kbpsISO144443_4A, PollingType.Passive106kbpsISO144443_4B });
                if (retData != null)
                {
                    break;
                }
                // Give time to PN532 to process
                Thread.Sleep(200);
            }
            if (retData == null)
            {
                return;
            }
            var decrypted = pn532.TryDecode106kbpsTypeA(retData.AsSpan().Slice(1));

            if (decrypted != null)
            {
                Console.WriteLine($"Tg: {decrypted.TargetNumber}, ATQA: {decrypted.Atqa} SAK: {decrypted.Sak}, NFCID: {BitConverter.ToString(decrypted.NfcId)}");
                if (decrypted.Ats != null)
                {
                    Console.WriteLine($", ATS: {BitConverter.ToString(decrypted.Ats)}");
                }
                MifareCard mifareCard = new MifareCard(pn532, decrypted.TargetNumber)
                {
                    BlockNumber = 0, Command = MifareCardCommand.AuthenticationA
                };
                mifareCard.SetCapacity(decrypted.Atqa, decrypted.Sak);
                mifareCard.SerialNumber = decrypted.NfcId;
                mifareCard.KeyA         = new byte[6] {
                    0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                };
                mifareCard.KeyB = new byte[6] {
                    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
                };                                                                   //new byte[6] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
                for (byte block = 0; block < 64; block++)
                {
                    mifareCard.BlockNumber = block;
                    mifareCard.Command     = MifareCardCommand.AuthenticationB;
                    var ret = mifareCard.RunMifiCardCommand();
                    if (ret < 0)
                    {
                        // Try another one
                        mifareCard.Command = MifareCardCommand.AuthenticationA;
                        ret = mifareCard.RunMifiCardCommand();
                    }
                    //var ret = pn532.InDataExchange(mifareCard.Tg, new byte[] { 0x60, block, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x66, 0x8D, 0x7E, 0x20 }, Span<byte>.Empty);
                    if (ret >= 0)
                    {
                        mifareCard.BlockNumber = block;
                        mifareCard.Command     = MifareCardCommand.Read16Bytes;
                        ret = mifareCard.RunMifiCardCommand();
                        if (ret >= 0)
                        {
                            Console.WriteLine($"Bloc: {block}, Data: {BitConverter.ToString(mifareCard.Data)}");
                        }
                        else
                        {
                            Console.WriteLine($"Error reading bloc: {block}, Data: {BitConverter.ToString(mifareCard.Data)}");
                        }
                        if (block % 4 == 3)
                        {
                            // Check what are the permissions
                            for (byte j = 3; j > 0; j--)
                            {
                                var access = mifareCard.BlockAccess((byte)(block - j), mifareCard.Data);
                                Console.WriteLine($"Bloc: {block - j}, Access: {access}");
                            }
                            var sector = mifareCard.SectorTailerAccess(block, mifareCard.Data);
                            Console.WriteLine($"Bloc: {block}, Access: {sector}");
                        }
                    }
                    else
                    {
                        Console.WriteLine($"Autentication error");
                    }
                }

                //ChangePermissions(pn532, mifareCard);

                //Console.WriteLine("press a key to exit");
                //while (!Console.KeyAvailable)
                //    ;
            }
        }