背景
- 首先贴上官方github地址https://github.com/NordicSemiconductor/Android-nRF-Mesh-Library
- 本次修改基于官方SDK 2.4.1版本.
- 阅读此文章之前,我们默认您对蓝牙mesh协议已经有了一定了解.
- 本次修复了一个问题,该问题是关于在收到蓝牙数据包的时候寻找appkey去解密数据包的时候发生的一个错误.
问题分析
出现此问题的时候,是一个很偶然的情况下,发现配网不成功,并且,一旦不成功,此设备将永远不成功,报出的异常是数据包解密出现了错误.
经过定位排查,发现是SDK的摘要算法( AID = k4(APP key) )出现了问题,因为不同的appkey通过摘要算法,会解出来相同的aid(appkey id),一旦会解出来相同的aid,那么在我的appkey list里面就会永远只会默认取第一个appkey,如果那个appkey不是我的目标appkey,那么就会就出现解数据包出错的问题.我们来看一下获取appkey的方法:
@Override
public byte[] getApplicationKey(final int aid)

本文档详细介绍了在蓝牙Mesh SDK中遇到的一个配网失败的问题,该问题源于在接收到数据包时,由于摘要算法导致的相同AID匹配错误。作者通过分析发现,SDK的AID计算可能导致不同AppKey产生相同的ID,从而导致错误的AppKey被用于解密。为解决这个问题,作者提出了两种解决方案:一是通过增加对NetworkKey的判断,确保AppKey与数据包对应的NetworkKey匹配;二是尝试使用所有AppKey解密,直至成功。通过这两种方法,可以有效避免解密错误的发生。
最低0.47元/天 解锁文章
4050

被折叠的 条评论
为什么被折叠?



