I wrote some code for authenticating to and reading from Mifare Classic cards on Android. It works perfectly on the first generation of Nexus 7 (2012) as well as on Samsung Galaxy Nexus I9250. However, it fails on a Samsung S3 Mini. The devices detects the card correctly as MifareClassic and I can use the connect()
method of the MifareClassic
object to connect to the tag, but it can't authenticate using either of the two available methods authenticateSectorWithKeyA
or authenticateSectorWithKeyB
. However, with the same code, authenticating and reading the data works correctly if using any of the other devices mentioned above!
My questions are:
- Is the authentication/encryption of the communication a hardware operation? Or is that done in software?
- Why can the device connect to the tag but not authenticate to it?