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); }
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); }