我是靠谱客的博主 风趣可乐,最近开发中收集的这篇文章主要介绍android读取bin文件内容,Android的NFC读取IsoDep文件内容,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我想看过一些资料出ISO/IEC 14443 A类卡。Android的NFC读取IsoDep文件内容

使用android应用程序分析卡片后,我发现应用程序(AID:15845F)具有我需要的特定文件(文件ID:01)。

我已经成功地连接到该卡,并选择应用程序。

String action = getIntent().getAction();

if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action))

{

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

Log.i(TAG, Arrays.toString(tagFromIntent.getTechList()));

IsoDep isoDep = IsoDep.get(tagFromIntent);

try

{

isoDep.connect();

byte[] SELECT = {

(byte) 0x00, // CLA = 00 (first interindustry command set)

(byte) 0xA4, // INS = A4 (SELECT)

(byte) 0x04, // P1 = 04 (select file by DF name)

(byte) 0x0C, // P2 = 0C (first or only file; no FCI)

(byte) 0x06, // Lc = 6 (data/AID has 6 bytes)

(byte) 0x31, (byte) 0x35,(byte) 0x38,(byte) 0x34,(byte) 0x35,(byte) 0x46 // AID = 15845F

};

byte[] result = isoDep.transceive(SELECT);

Log.i(TAG, "SELECT: " + bin2hex(result));

if (!(result[0] == (byte) 0x90 && result[1] == (byte) 0x00))

throw new IOException("could not select application");

byte[] GET_STRING = {

(byte) 0x00, // CLA Class

(byte) 0xB0, // INS Instruction

(byte) 0x00, // P1 Parameter 1

(byte) 0x00, // P2 Parameter 2

(byte) 0x04 // LE maximal number of bytes expected in result

};

result = isoDep.transceive(GET_STRING);

Log.i(TAG, "GET_STRING: " + bin2hex(result));

}

}

但我的第二个查询失败,错误代码:6A86(不正确的参数P1-P2)。我已经GOOGLE了很多,发现不同的文件(例如:http://bit.ly/180b6tB),但我只是不明白,我怎么能实现正确的值为P1和P2。

EDIT

标签使用NFC TagInfo卡的类型:ISO/IEC 14443-4智能卡,的Mifare的DESFire EV1(MF3ICD81)

SELECT命令中使用的源代码实际上没有失败,但是它返回了一个9000响应。所以这就是为什么我认为一切正常。

你提到NFC TagInfo没有为DF-名称等提供正确值是值0x313538343546正确的,你是怎么发现的?

你能提供给我一个短描述,我怎么能得到我想要的数据?有没有其他的Android应用可以用来阅读正确的DF名称,AID等?基本上,我需要得到ONE文件出来ONE应用。如果需要,我还可以提供与NFC TagInfo收集的信息的一些屏幕截图。

EDIT 2

我已经重写了命令,但(你提出的)让他们在APDU包装。因此,我结束了两个不同的命令,一个用于选择应用程序,另一个用于选择文件。

private final byte[] NATIVE_SELECT_APP_COMMAND = new byte[]

{

(byte) 0x90, (byte) 0x5A, (byte) 0x00, (byte) 0x00, 3, // SELECT

(byte) 0x5F, (byte) 0x84, (byte) 0x15, (byte) 0x00 // APPLICATION ID

};

private final byte[] NATIVE_SELECT_FILE_COMMAND = new byte[]

{

(byte) 0x90, (byte) 0xBD, (byte) 0x00, (byte) 0x00, 7, // READ

(byte) 0x01, // FILE ID

(byte) 0x00, (byte) 0x00, (byte) 0x00, // OFFSET

(byte) 0x00, (byte) 0x00, (byte) 0x00, // LENGTH

(byte) 0x00

};

本教程提供了一个卡认证,这是我残疾,并且还使用了收发方法,这对我的理解是不是执行本机命令的正确方法?哪种方法,甚至是代码snippit,用于执行本机命令?我应该使用哪个Android类?

我已经重写了教程中提供的类,并将其上载到pastebin。执行这个类后,我得到了以下结果。

Select APPLICATION: 9100

Read DATA: 91AE

在这一点上我很卡,不知道我下一步应该怎么做几步之遥。实际上是错误还是我应该执行的查询中的更改以获取我想要的数据?

2013-10-10

Vilius

最后

以上就是风趣可乐为你收集整理的android读取bin文件内容,Android的NFC读取IsoDep文件内容的全部内容,希望文章能够帮你解决android读取bin文件内容,Android的NFC读取IsoDep文件内容所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部