android开发分享使用固定卡ID的基于主机的卡模拟

Android 4.4引入了基于主机的卡仿真(HCE)。 如您所知,所有NFC卡都带有一个固定的卡号( NfcAdapter.EXTRA_ID )。

我的办公室门禁通常会检测授权的NFC卡ID。 将手机闪烁到KitKat后,我尝试用接入阅读器扫描手机。 但是,每当屏幕closures和再次打开,我得到一个不同的卡ID。

我曾尝试保持电话屏幕,并将模拟卡ID注册到门禁系统。 它设法授予访问开门。 但是在屏幕closures和再次打开之后,这将不起作用。

自从KitKat推出HCE模式以来,我一直在用我的手机来模拟我的门禁卡。

任何想法使电话模拟卡ID固定?

    这是(至less在官方的API)不可能的:

    在交换的第一部分,HCE设备将呈现其UID; 假设HCE设备具有随机的UID。 这意味着在每个水龙头中,呈现给读者的UID将是随机生成的UID。 因此,NFC阅读器不应该依赖HCE设备的UID作为authentication或识别的forms。

    ( )

    根据负责HCE的Google开发者之一:

    对不起,我意识到很多人想要这个,但在官方版本中是不可能的。 (你当然可以用一些AOSP黑客来做)。 原因是HCE是围绕后台运行而devise的。 如果我们允许应用程序设置UID,则每个应用程序都可能要设置自己的UID,而且无法解决冲突。 我们希望通过HCE,NFC基础设施将移动到更高层次的协议栈上进行身份validation,而不依赖于UID(无论如何都很容易克隆)。

    至lessBroadcom的NFC控制器(例如在Nexus 5中使用)支持设置防冲突标识符(UID),ATQA和SAK字节的任意值。 但是,没有改变它们的API,所以唯一的方法就是修改libnfc-nci库。

    NFC-A的相关代码位于文件nfa_dm_discover.c (从第322行开始):

     UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD); UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD); UINT8_TO_STREAM (p, 0x04); UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG); UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG); UINT8_TO_STREAM (p, platform); UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO); UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO); UINT8_TO_STREAM (p, sens_info); 

    此代码当前设置ATQA(值平台和0x04的组合)和SAK字节(sens_info的值)。

    为了更改NFC-A防冲突期间使用的UID,您可以添加添加参数NFC_PMID_LA_NFCID1:

     UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1); UINT8_TO_STREAM (p, 4); // length of NFCID1 in bytes UINT8_TO_STREAM (p, 0x12); UINT8_TO_STREAM (p, 0x34); UINT8_TO_STREAM (p, 0x56); UINT8_TO_STREAM (p, 0x78); 

    你可以在这里find一个更可定制的libnfc-nci版本(尽pipe如此,还在工作)。

      以上就是android开发分享使用固定卡ID的基于主机的卡模拟相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/518028.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐