使用PN532进行IC卡的Linux和Windows平台的数据读取以及写入过程

2021/6/18 7:05:46

本文主要是介绍使用PN532进行IC卡的Linux和Windows平台的数据读取以及写入过程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

强调:勿用于非法用途
       本文介绍使用PN532进行IC卡的Linux和Windows平台的数据读取以及写入过程。
注意: 在树莓派平台只做到了卡片解密,并没能写入UID卡,我不清楚具体原因,最后我在Win10平台进行了卡片的写入。欢迎学习和参考。

前言

       现在大多数IC卡都有加密,我最开始想用RC522解决这个问题。因为之前我也有过MFRC522的使用经验,在网上看过一些文章,有些人说RC522功能不够强(相比于PN532),也有人说他尝试过用RC522进行密码破解,于是我尝试了。我将RC522采用SPI通信连接上树莓派3B+,最后止步于安装libnfc,因为libnfc不支持RC522。为了节约时间,没有再耗下去。

       PN532我也不太清楚功能到底如何,买来尝试一下,毕竟它便宜,还能买得起。相比于PM3,PN532便宜太多了。新品只需21.5元。
我买的红色板子,需要自己焊接排针,简简单单地使用十块钱的烙铁就搞好了。

PN532支持三种连接方式

       - SPI
       - I2C
       - UART
       对于这几种连接方式,我在树莓派上采用的是I2C,在Win10上采用的是UART。

Win10平台

       Win10平台最推荐,方法最简单,流程也简单。下面介绍硬件连接和软件操作。

1. 选择PN532通信方式

       拨动芯片上的开关到对应的通信方式,我采用的是I2C。如图:
展示PN532上的通信方式选择的位置

2. 串口转USB

       大多数网上的帖子用的是CH340,由于我手上已经有了CH341,同样可以实现接口转换。
CH341连接说明
       用杜邦线进行连接:
       - 5V <==> VCC
       - GND <==> GND
       - RX <==> TX
       - TX <==> RX
       注意跳帽的连接:配图的跳帽不是UART通信方式,需要挪一个位置。让2,3连接。

3. Win10软件操作

这是网上找到的程序。可以读SAK08的M1卡,进行常规解密,我就尝试了校园卡和小区门禁,都成功了。随后我试了一下另一个学校的校园卡SAK20的卡,这个不支持。SAK20属于CPU卡,现目前没有解密方法。软件使用方法就不介绍了,网上太多了。
PN532上位机

树莓派3B+平台

1. 选择PN532通信方式

       树莓派可以用多种连接方式,我只采用了I2C,其他没试过。需要拨动开关。开关位置可见Win10平台配图。

2. 树莓派与PN532连接

       用杜邦线进行连接:
       - 5V <==> 5V
       - GND <==> GND
       - SDA <==> SDA
       - SLA <==> SLA
       树莓派引脚图:
树莓派引脚图

3. 树莓派软件配置

1). 设置树莓派

sudo raspi-config

在rasp-config里将i2c打开,重启之后应该有/dev/i2c-1
执行 i2cdetect -y 1 ,如果出现的不全是横杠,就代表连接成功了。

2). 在树莓派上安装必要的库

sudo apt-get install libusb-dev libpcsclite-dev automake autoconf

libpcsclite-dev这个库我好像没安装成功,我直接执行后面的了。
编译安装libnfc

wget http://dl.bintray.com/nfc-tools/sources/libnfc-1.7.1.tar.bz2
tar -xf libnfc-1.7.1.tar.bz2
cd libnfc-1.7.1
./configure --prefix=/usr --sysconfdir=/etc
make
sudo make install

然后添加配置文件

cd /etc
sudo mkdir nfc
sudo nano /etc/nfc/libnfc.conf

如下:

# Allow device auto-detection (default: true)
# Note: if this auto-detection is disabled, user has to manually set a device
# configuration using file or environment variable
allow_autoscan = true
 
# Allow intrusive auto-detection (default: false)
# Warning: intrusive auto-detection can seriously disturb other devices
# This option is not recommended, so user should prefer to add manually his/her device.
allow_intrusive_scan = false
 
# Set log level (default: error)
# Valid log levels are (in order of verbosity): 0 (none), 1 (error), 2 (info), 3 (debug)
# Note: if you compiled with --enable-debug option, the default log level is "debug"
log_level = 1
 
# Manually set default device (no default)
# To set a default device, users must set both name and connstring for their device
# Note: if autoscan is enabled, default device will be the first device available in device list.
device.name = "Itead_PN532_I2C"
device.connstring = "pn532_i2c:/dev/i2c-1"

然后放上一张卡,执行

nfc-list

显示如下:

[email protected]:~# nfc-list
nfc-list uses libnfc 1.7.1
NFC device: pn532_i2c:/dev/i2c-1 opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): XX XX
       UID (NFCID1): XX XX XX XX
      SAK (SEL_RES): XX

libnfc到这里安装结束了

安装mfoc和mfcuk(以下作为参考,我只使用了mfoc)

mfoc(破解key,读出数据到文件):https://github.com/nfc-tools/mfoc
mfuck(破解全加密数据):https://github.com/nfc-tools/mfcuk
后两个下载解压后切换到目录里执行:

automake
autoconf
autoreconf -is
./configure
make
make install

读写数据

mfoc -O output.mfd    # 读出卡中的数据保存为文件output.mfd 

mfoc 是读取数据,如果有加密就自动破解,如果全加密,就没法读取,可用mfuck命令破解。

mfcuk -C -R 0:A -v 2

写入数据

nfc-mfclassic w a  output.mfd output.mfd    #  写入数据,w小写,如果大写是强写0扇区

由于每张卡的0扇区信息(UID)不一样,0扇区又不可写,不同的卡没法互写。但是可以买一张0扇区可写的UID卡。
最后,破解的文件无法写入,就算我的卡是UID卡,不清楚原因。我选择Win10了平台进行卡的写入。
参考文章链接如下:
树莓派+pn532使用NFC,由树莓派俱乐部总结
在树莓派上使用 PN532 NFC读卡器[0]——libnfc的安装配置
复制MIFARE Classic小区门禁卡记录
软件下载



这篇关于使用PN532进行IC卡的Linux和Windows平台的数据读取以及写入过程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程