gpt4 book ai didi

Android NFC 从标签类型 : IsoDep and NfcB 读取

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:51 27 4
gpt4 key购买 nike

总的来说,我对 Android 开发和 NFC 还很陌生。

我正在尝试构建一个应用程序来读取我对这张卡(公交卡)一无所知的 NFC 卡的内容,例如我想看看我还剩下多少张票。

我用各种 NFC 应用程序扫描了这张卡,知道这张卡的类型是:IsoDep AND NfcB。

现在我正在尝试使用 IsoDep 读取其内容,但没有成功(错误 6A82、91AE、6E00 等)。

我有一个应用程序正在等待 ACTION_NDEF_DISCOVERED || 类型的新 Intent ACTION_TECH_DISCOVERED || ACTION_TAG_DISCOVERED 打开一个新线程(因为无法在 UI 线程上读取和连接),我正在尝试读取卡片的内容。

我想我的问题出在传递给 isoDep.transceive(NATIVE_SELECT_APP_COMMAND) 的字节上。

我应该继续尝试使用 IsoDep 还是应该尝试使用 NfcB?你们有什么建议吗?

这是我的代码示例:

 final byte[] SELECT = {
(byte) 0x00, // CLA Class
(byte) 0xA4, // INS Instruction
(byte) 0x04, // P1 Parameter 1
(byte) 0x00, // P2 Parameter 2
(byte) 0x08, // Length
(byte) 0x31, (byte)0x54, (byte)0x49, (byte)0x43, (byte)0x2e,
(byte) 0x49, (byte)0x43, (byte)0x41, // AID 315449432e494341
};
Tag tagFromIntent = m_intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
IsoDep isoDep = IsoDep.get(tagFromIntent);
try {
isoDep.connect();
byte[] result = isoDep.transceive(SELECT);
String str = bytesToHex(result);
Log.i("test", "SELECT: " + str);
isoDep.close();
} catch (Exception e) {
String error = e.getMessage();
}

我的字节到十六进制函数:

final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for ( int j = 0; j < bytes.length; j++ ) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}

============================================= ==============

编辑:

我刚了解到这张卡使用的是Calypso认证方案。

这个问题的回答对我有点帮助:Read data from NFC tag (IsoDep)我找到了一个很好的 SELECT 函数,我编辑了我的问题以保留正在运行的新“SELECT”命令 - 作为返回,我得到这个字符串:“6F228408315449432E494341A516BF0C13C70800000000029780A55307060A07062004019000”,我不知道它是什么意思。

然后我使用这个命令尝试读取一个字符串:

byte[] GET_STRING = {
(byte) 0x80, // CLA Class
0x04, // INS Instruction
0x00, // P1 Parameter 1
0x00, // P2 Parameter 2
0x10 // LE maximal number of bytes expected in result
};

但我得到错误:6E00,关于如何继续的任何想法?

最佳答案

您可以使用 IsoDep 与卡进行通信。

你想在没有这张卡规范的情况下访问卡上的数据,所以有两种方法:

  • 获取卡的规范(如何与之通信)
  • 逆向工程,时间长,结果不确定,可以“锁定”卡的访问权限

更新 1

要阅读 Rav Kav 卡,有一个开源项目:http://pannetrat.com/Cardpeek/ Rav Kav 的代码在这里 https://code.google.com/p/cardpeek/source/browse/trunk/dot_cardpeek_dir/scripts/calypso/c376n3.lua

关于Android NFC 从标签类型 : IsoDep and NfcB 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31795643/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com