使用Dart语言和Flutter_Blue库进行身份验证的MiBand3

时间:2020-10-02 23:43:28

标签: flutter authentication dart bluetooth xiaomi

两个星期前,我正忙于揭开与miband蓝牙连接通信失败的声音。我是扑扑的初学者,但是显然这是社区中的新事物,我没有找到该语言的任何特定材料。

让我们解决这个问题!

目标:通过混合应用程序(在出现抖动的情况下)在小米智能手环(MiBand3)上读写数据。

错误:

手镯会在30秒内断开连接,并且发送后不会接收数据。

Pubspec.yaml文件:

environment:
  sdk: "> = 2.7.0 <3.0.0"
dependencies:
  flutter:
    sdk: flutter
  flutter_blue: ^ 0.7.2
  typed_data: ^ 1.2.0
  encrypt: ^ 4.0.3
  cupertino_icons: ^ 0.1.3
  byte_data_wrapper:
    git: git: //github.com/Taym95/byte_data_wrapper.git

dev_dependencies:
  flutter_test:
    sdk: flutter

遇到错误的原因:

根据我在互联网上找到的其他语言的一些资料,我需要使用手镯进行身份验证过程。该链接提供了我发现的最完整的说明https://leojrfs.github.io/writing/miband2-part1-auth/

问题:

如何在颤动中实现这一点? 发送到特定UUID,然后接收字节并仅读取开始,然后仅接收最后16个字节并进行加密,然后再次发送的过程……这在我脑海中非常困惑!对于初学者来说,这没什么不同。好!我能够映射整个身份验证过程并在下面描述摘要,我希望您能帮助我理解如何使用flutter_blue进行实现并发送?

身份验证步骤:

  1. 创建一个16字节的密钥。例如:{0x30、0x31,...,0x46、0x45}
  2. 通过向服务UUID 0x0009发送TRUE,在miband上启用通知
  3. 发送{0x01,0x08,KEY}到UUID 0x0009。
  4. 检查返回的前三个字节是否为{0x10、0x01、0x01},这表示接收成功。
  5. 现在发送另一个请求,该请求的第一个元素中有一个额外的位,并且没有键{0x02,0x08}
  6. 如果等于{0x10,0x02,0x01}表示成功,请再次检查收益。
  7. 从步骤6中获取响应的最后16个字节,并使用在步骤1中创建的密钥使用AES / ECB / NoPadding对其进行加密。存储在RESPONSE_KEY变量中。
  8. 使用上面创建的加密响应发送另一个请求。例如:{0x03、0x08,RESPONSE_KEY},与步骤3中的操作类似。
  9. 检查返回值,如果等于{0x10、0x03、0x01},则可能已经发送了数据。

0 个答案:

没有答案