日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

nfc sim android8,Android NFC相关资料之MifareClassic卡(读写)

發布時間:2025/3/12 Android 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nfc sim android8,Android NFC相关资料之MifareClassic卡(读写) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from:?http://wszf.net/archives/2012/11/07/80510.html

一般來說,給予MifareClassic的射頻卡,一般內存大小有3種:

1K: 16個分區(sector),每個分區4個塊(block),每個塊(block) 16個byte數據

2K: 32個分區,每個分區4個塊(block),每個塊(block) 16個byte數據

4K:64個分區,每個分區4個塊(block),每個塊(block) 16個byte數據

對于所有基于MifareClassic的卡來說,每個區最后一個塊叫Trailer,16個byte, 主要來存放讀寫該區的key,可以有A,B兩個KEY,每個key長6byte,默認的key一般是FF 或 0,最后一個塊的內存結構如下:

Block 0 ?Data 16bytes

Block 1 ?Data 16 bytes

Block 2 ?Data 16 bytes

Block 3 ?Trailer 16 bytes

Trailer:

Key A: 6 bytes

Access Conditions: 4 bytes

Key B: 6 bytes

M1卡分為16個扇區,每個扇區由4塊(塊0、塊1、塊2、塊3)組成,(我們也將16個扇區的64個塊按絕對地址編號為0~63,)存貯結構如右表所示

0

塊0

數據塊

0

塊1

數據塊

1

塊2

數據塊

2

塊3

密碼A存取控制 ? ?密碼B

數據塊

3

1

塊0

數據塊

4

塊1

數據塊

5

塊2

數據塊

6

塊3

密碼A存取控制 ? ?密碼B

數據塊

7

15

塊0

數據塊

60

塊1

數據塊

61

塊2

數據塊

62

塊3

密碼A存取控制 ? ?密碼B

數據塊

63

第0扇區的塊0(即絕對地址0塊),它用于存放廠商代碼,已經固化,不可更改。

每個扇區的塊0、塊1、塊2為數據塊,可用于存貯數據。

每個扇區的塊3為控制塊,包括了密碼A、存取控制、密碼B。具體結構如下:

A1A2 A3 A4 A5 ? ? ? ? ? ? ? FF 07 8069 ? ? ? ? ? ? ? B0 B1 B2 B3 B4 B5

密碼A(6字節) ? ? ? ? ?存取控制(4字節) ? ? ? ? ?密碼B(6字節)

每個扇區的密碼和存取控制都是獨立的,可以根據實際需要設定各自的密碼及存取控制;

存取控制為4個字節,共32位,扇區中的每個塊(包括數據塊和控制塊)的存取條件是由密碼和存取控制共同決定的。工作原理:

讀寫器向M1卡發一組固定頻率的電磁波,卡片內有一個LC串聯諧振電路,其頻率與訊寫器發射的頻率相同,在電磁波的激勵下,LC諧振電路產生共振,從而使電容內有了電荷,在這個電容的另一端,接有一個單向導通的電子泵,將電容內的電荷送到另一個電容內儲存,當所積累的電荷達到2V時,此電容可做為電源為其它電路提供工作電壓,將卡內數據發射出去或接取讀寫器的數據。

Android 讀寫M1卡

先了解一下MifareClassic協議

在android sdk 的文檔中,描述道 “allMifareClassicI/O operations will be supported, andMIFARE_CLASSICNDEF tags will also be supported. In either case,NfcAwill also be enumerated on the tag, because all MIFARE Classic tags are alsoNfcA.” 所以說NFCA協議是兼容MifareClassic 協議的, 我們可以通過NfcA在android的相關類來處理給予MifareClassic 的RFID卡。

讀M1卡代碼:

01

if?(NfcAdapter.ACTION_TECH_DISCOVERED.equals(action))

02

{

03

// 3) Get an instance of the TAG from the NfcAdapter

04

Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

05

// 4) Get an instance of the Mifare classic card from this TAG

06

// intent

07

mfc = MifareClassic.get(tagFromIntent);

08

if(mfc!=null)

09

{

10

Toast.makeText(this,"檢測到卡片,讀卡中。。。", Toast.LENGTH_SHORT).show();

11

try

12

{

13

mfc.connect();

14

boolean?auth =false;

15

auth = mfc.authenticateSectorWithKeyA(15,"passwo".getBytes());//驗證密碼

16

if?(auth)

17

{

18

card_number_edittext.setText(new?String(mfc.readBlock(60)));//讀取M1卡的第60塊即15扇區第0塊

19

password_edittext.requestFocus();

20

}

21

}catch?(Exception e)

22

{

23

if(BuildConfig.DEBUG)

24

{

25

e.printStackTrace();

26

}

27

28

}

29

}

30

}// End of method

寫M1卡代碼:

01

try

02

{

03

mfc.connect();

04

boolean?auth =false;

05

short?sectorAddress =1;

06

auth = mfc.authenticateSectorWithKeyA(sectorAddress, MifareClassic.KEY_DEFAULT);

07

if?(auth)

08

{

09

// the last block of the sector is used for KeyA and KeyB cannot be overwritted

10

mfc.writeBlock(4,"1383838438000000".getBytes());//必須為16字節不夠自己補0

11

mfc.close();

12

Toast.makeText(MainActivity.this,"寫入成功", Toast.LENGTH_SHORT).show();

13

}

14

}catch?(IOException e)

15

{

16

// TODO Auto-generated catch block

17

e.printStackTrace();

18

}finally

19

{

20

try

21

{

22

mfc.close();

23

}catch?(IOException e)

24

{

25

// TODO Auto-generated catch block

26

e.printStackTrace();

27

}

28

}

Demo下載地址:NFCDemo

參考資料:1/2/3/4/5

posted on 2012-12-25 11:47 汪杰 閱讀(12494) 評論(3) ?編輯?收藏 引用

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的nfc sim android8,Android NFC相关资料之MifareClassic卡(读写)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。