I am trying to read the data from an NFC card I have for a project. It is using Mifare classic 1k and has 16 sectors.
I am able to connect to the card and I'm trying to read the data (I know the data that I want is in the 2nd sector - 2nd Block). I can scan the card fine and it shows me the size of the card so this ensures me that the card is being scanned properly but the data I get when I Log the "data.readBlock(2)" is just the same as the key I use to authenticate it.
What I understand from the code: Card connects Auth == true I can get overall details of the card such as sector count / block count
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
MifareClassic tag = MifareClassic.get(tagFromIntent) ;
try {
//Variables
int sectorCount = tag.getSectorCount();
int tagSize = tag.getSize();
boolean auth;
//Keys
byte[] defaultKeys = new byte[]{};
defaultKeys = MifareClassic.KEY_DEFAULT;
//Connecting to tag
tag.connect();
//auth = true
auth = tag.authenticateSectorWithKeyA(2, defaultKeys);
byte[] data = tag.readBlock(2);
Log.i("OnNewIntent", "Data in sector 2: " + Arrays.toString(data));
} catch (IOException e) {
e.printStackTrace();
}
Expected = "Data in sector 2: The data in sector 2 block 2
"
Actual = "Data in sector 2: [B@4df9e32"
The above Actual result changes each time the card is scanned.
What you are getting is the object reference Java uses to keep it in memory. To get a readable version of the data instead use:
Arrays.toString(data);
By the way, you may want to change your code to check if the authentication was successful:
authSuccessful = mfc.authenticateSectorWithKeyA(sector, key);
if(authSuccessful){
// Read the block
creditBlock = mfc.readBlock(block);
String bytesString = Arrays.toString(creditBlock);
Log.i(TAG, bytesString);
} else {
Log.e(TAG, "Auth Failed");
}
Finally, I'm pretty sure what you are trying to do is just the standard Mifare card read so avoid jumping to conclusions. As they say in medicine:
Think horses, not zebras