使用 ST25 android SDK 的 NFC 标签密码保护

NFC-tag password protection with ST25 android SDK

我正在使用 ST25 标签,更具体地说是 type5 标签 ST25DV64K。 android 的 ST25 SDK 中有一些有趣的示例和教程。我仍在努力使用文档 here 末尾提供的关于 密码保护数据 的代码示例,其中包含以下几行:

byte[] password;
int passwordNumber = type5Tag.getPasswordNumber(area);
tag.presentPassword(passwordNumber, password);
NDEFMsg ndefMsg = myTag.readNdefMessage(area);

第一个问题,当我实例化一个 type5 标签时,我没有看到 Type5Tag class:

的那些方法
import com.st.st25sdk.type5.*;
Type5Tag tag5;
tag5.??

那么,一开始我们应该如何设置密码就不清楚了。我找不到任何为特定区域设置密码并删除它的示例,我们可以使用的密码格式是什么?是否可以从 android 执行此操作,还是我们必须使用 ST25 应用程序?欢迎举例!谢谢。

在 ST25 SDK Zip 文件中,您将找到使用 ST25 SDK 库的基本 Android 应用程序示例(位于 \integration\android\examples\ST25AndroidDemoApp 中)。

此示例使用名为“TagDiscovery”的 class,它能够识别任何 ST25 标签并实例化正确的对象。在你的情况下,如果你只使用 ST25DV64K 标签,你可能想做一些简单的事情。

以下是我的建议: 在你的 android activity 中,我希望你订阅了每次贴上 NFC 标签时都会收到通知(在“ST25AndroidDemoApp”示例中,查看 onResume 中的 enableForegroundDispatch() () 功能)。 为了确定 Intent 是否对应于“NFC Intent”,我们检查 Intent 的 Action 是 ACTION_NDEF_DISCOVERED、ACTION_TECH_DISCOVERED 还是 ACTION_TAG_DISCOVERED.

当出现这种情况时,我们知道这是一个NFC Intent。然后我们可以调用它来获取 androidTag:

的实例
Tag androidTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

此对象表示 Android 中的当前 NFC 标签。

我们现在要实例化一个 ST25DVTag 对象。

import com.st.st25sdk.type5.st25dv.ST25DVTag;

…

AndroidReaderInterface readerInterface = AndroidReaderInterface.newInstance(androidTag);
byte[] uid = androidTag.getId();
uid = Helper.reverseByteArray(uid);
ST25DVTag myST25DVTag = new ST25DVTag(readerInterface, uid);

您现在有一个名为 myST25DVTag 的对象,可用于与标签通信!

例如,如果您想使用密码:

byte[] password = new byte[];      // TODO: Fill the password
int passwordNumber = myST25DVTag.getPasswordNumber(area);
myST25DVTag.presentPassword(passwordNumber, password);
NDEFMsg ndefMsg = myST25DVTag.readNdefMessage(area);

在此之前,您需要检查与该区域关联的密码。标签有 3 个密码,可以自由分配给任何区域。默认情况下没有设置密码,因此您应该设置一个。下面是我使用 Area1 的密码 2 的示例:

int AREA1 = 1;
int passwordChosen = 2;
myST25DVTag.setPasswordNumber(AREA1, passwordChosen);
                           

我建议您安装来自 Google 的“ST25 NFC Tap”Android 应用程序:https://play.google.com/store/apps/details?id=com.st.st25nfc&hl=fr&gl=US 如果你点击你的 ST25DV 并进入“区域安全状态”菜单,你将能够看到:区域的数量,哪些区域受读取密码保护 and/or 写入,使用哪个密码......等

如果您有兴趣,可以在此处获取此应用程序的源代码:https://www.st.com/en/embedded-software/stsw-st25001.html

如果有什么不清楚的地方请告诉我。

免责声明:我是 ST25 SDK 开发团队的成员。