---
name: "nfc-mfclassic"
section: "1"
platform: "linux"
package: "libnfc"
version: "1.8.0-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/nfc-mfclassic"
---

# nfc-mfclassic(1)

MIFARE Classic command line tool

## NAME

nfc-mfclassic - MIFARE Classic command line tool

## SYNOPSIS

**nfc-mfclassic** **f**\|**r**\|**R**\|**w**\|**W** **a**\|**A**\|**b**\|**B** **u**\|**U**\<**uid**\> *DUMP* \[ *KEYS* \[**f**\] \]

## DESCRIPTION

**nfc-mfclassic** is a MIFARE Classic tool that allow to read or write *DUMP* file using MIFARE keys provided in  *KEYS* file.

MIFARE Classic tag is one of the most widely used RFID tags.

The firmware in the NFC controller supports authenticating, reading and writing to/from MIFARE Classic tags. This tool demonstrates the speed of this library and its ease-of-use. It's possible to read and write the complete content of a MIFARE Classic 4KB tag within 1 second. It uses a binary MIFARE Dump file (MFD) to store the keys and data for all sectors.

Be cautious that some parts of a MIFARE Classic memory are used for r/w access of the rest of the memory, so please read the tag documentation before experimenting too much!

The **f** option to format the card will reset all keys to FFFFFFFFFFFF, all data to 00 and all ACLs to default.

The **W** option allows writing of special MIFARE cards that can be 'unlocked' to allow block 0 to be overwritten. This includes UID and manufacturer data. Take care when amending UIDs to set the correct BCC (UID checksum). Currently only 4 byte UIDs are supported.

Similarly, the **R** option allows an 'unlocked' read. This bypasses authentication and allows reading of the Key A and Key B data regardless of ACLs.

R/W errors on some blocks can be either considered as critical or ignored. To halt on first error, specify keys with lowercase ( **a** or **b** ). To ignore such errors, use uppercase ( **A** or **B** ).

When using multiple tags infront of a reader, the **U** option can be used to supply the UID of tag to be read or written. Append the hexadecimal UID to the U option. For example U01ab23cd for the 4 byte UID 0x01 0xab 0x23 0xcd. Using the **u** parameter instead will use whatever libnfc decides which generally is the lowest UID.

\*\*\* Note that **W** and **R** options only work on special versions of MIFARE 1K cards (Chinese clones).

## OPTIONS

- **f** \| **r** \| **R** \| **w** \| **W**

  Perform format ( **f** ) or read from ( **r** ) or unlocked read from ( **R** ) or write to ( **w** ) or unlocked write to ( **W** ) card.

- **a** \| **A** \| **b** \| **B**

  Use A or B MIFARE keys. Halt on errors ( **a** \| **b** ) or tolerate errors ( **A** \| **B** ).

- **u** \| **U**

  Use the default UID ( **u** ) or supply a valid 4 byte UID ( **U\<uid\>** ).

- *DUMP*

  MiFare Dump (MFD) used to write (card to MFD) or (MFD to card)

- *KEYS*

  MiFare Dump (MFD) that contains the keys (optional). Data part of the dump is ignored.

- **f**

  Force using the keyfile *KEYS* even if UID does not match (optional).

## BUGS

Please report any bugs on the **libnfc** issue tracker at:\
 **https://github.com/nfc-tools/libnfc/issues**

## LICENCE

**libnfc** is licensed under the GNU Lesser General Public License (LGPL), version 3.\
 **libnfc-utils** and **libnfc-examples** are covered by the the BSD 2-Clause license.

## AUTHORS

Adam Laurie \<adam@algroup.co.uk\>, \
 Roel Verdult \<roel@libnfc.org\>, \
 Romain Tartière \<romain@libnfc.org\>, \
 Romuald Conty \<romuald@libnfc.org\>.

This manual page was written by Romuald Conty \<romuald@libnfc.org\>. It is licensed under the terms of the GNU GPL (version 2 or later).
