Example #1
0
        public List <byte[]> MifareClassic_ReadSector(MifareClassic mfc, int Sector)
        {
            int blockCount = mfc.GetBlockCountInSector(Sector);
            var lst        = new List <byte[]>(blockCount);
            int readIndex  = mfc.SectorToBlock(1);

            for (int i = 0; i < blockCount; i++)
            {
                lst[i] = mfc.ReadBlock(readIndex);
                readIndex++;
            }
            return(lst);
        }
Example #2
0
        private bool TryAndReadFromTag(Tag tag)
        {
            MifareClassic mfc = MifareClassic.Get(tag);

            byte[] data;
            bool   auth = false;

            try
            {
                mfc.Connect();
                String UID      = byte2hex(mfc.Tag.GetId());
                String cardData = null;
                int    secCount = 1;
                int    bCount   = 3; //Just read 2 block for now
                int    bIndex   = 0;
                for (int j = 1; j <= secCount; j++)
                {
                    auth = mfc.AuthenticateSectorWithKeyB(j, KEY_DEFAULT);
                    if (auth)
                    {
                        //bCount = mfc.GetBlockCountInSector(j);
                        bIndex = mfc.SectorToBlock(j);
                        for (int i = 0; i < bCount; i++)
                        {
                            data      = mfc.ReadBlock(bIndex);
                            cardData += Encoding.ASCII.GetString(data);
                            bIndex++;
                        }
                        DisplayMessage(cardData);
                        mfc.Close();
                        return(true);
                    }
                    else
                    {
                        Log.Error(Tag, "Sector read authentication failed");
                        mfc.Close();
                        return(false);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(Tag, e.Message);
            }
            return(false);
        }
        public List <object> LerTodosOsSetoresDoCartao()
        {
            byte[]        byteRead;                           // Irá armazenar os byte lidos do cartão
            bool          auth         = false;               // Valida se existe ou não permissão para ler o bloco
            int           quantSetores = 0;                   // Quantidade de setores existentes no cartão
            int           blocoCount   = 0;                   // Quantidades de blocos existentes no cartão
            int           blocoIndex   = 0;                   // Irá armazenar o indice que esta sendo lido do cartão
            List <object> ByteRetorno  = new List <object>(); // Lista com a leitura de todos os blocos e setores

            try
            {
                // Faz a conexão com o cartão
                ValidConexaoCartao();

                // Irá armazenar a quantidade de setores existentes no cartão
                quantSetores = MifareClassic.BlockSize;

                // Percorre todos os setores existentes no cartão
                for (int i = 0; i < quantSetores; i++)
                {
                    // Faz a validação de permissão para a leitura do bloco A
                    auth = ValidPermissaoBlocoA(i);

                    if (!auth)
                    {
                        // Faz a validação de permissão para a leitura do bloco B
                        auth = ValidPermissaoBlocoB(i);
                    }

                    if (auth)
                    {
                        // Busca a quanidade de blocos em um setor
                        blocoCount = mifareClassic.GetBlockCountInSector(i);

                        // Percore todos os blocos do setor
                        for (int j = 0; j < blocoCount; j++)
                        {
                            // É necessário fazer novamente a validação de permissão Bloco a bloco

                            // Faz a validação de permissão para a leitura do bloco A
                            auth = ValidPermissaoBlocoA(j);

                            if (!auth)
                            {
                                // Faz a validação de permissão para a leitura do bloco B
                                auth = ValidPermissaoBlocoB(j);
                            }

                            if (auth)
                            {
                                // seta o indice do setor dentro do bloco
                                blocoIndex = mifareClassic.SectorToBlock(j);

                                // Faz a leitura de um BLOCO no setor
                                byteRead = mifareClassic.ReadBlock(blocoIndex);
                                ByteRetorno.Add(byteRead);
                            }
                        }
                    }
                }
            }
            catch (IOException e)
            {
                throw new IOException(e.Message);
            }
            finally
            {
                // Fecha a conexão com o cartão
                DesconectaCartao();
                this.GravaTempoFinal();
            }

            return(ByteRetorno);
        }