杰理 SDK 文档中心
首页
首页
  • 快速开始

    • 环境要求与权限配置
    • 集成SDK依赖
    • 运行示例应用
  • 核心架构与协议

    • RCSP协议与数据通道
    • 蓝牙连接与设备管理
    • TWS双耳功能
    • 基础功能接口与自定义命令
  • 设备功能控制

    • 设备音乐控制与ID3信息
    • 文件浏览与传输
    • FM收音与发射
    • 灯光控制
    • 闹钟与时间管理
    • 查找设备与防丢
    • ANC与噪声处理
    • 按键功能设置
    • 彩屏仓控制
    • AI翻译
  • 音效与音频处理

    • 均衡器音效调节
    • 录音与语音控制
    • Line-in、SPDIF与声卡功能
    • 音频编解码库
  • 扩展功能库

    • OTA固件升级
    • 数据加密与解密
    • 图片与动图格式转换
  • 示例应用 btsmart

    • 应用架构与界面导航
    • 设备功能适配与数据层
    • 设备配置JSON与资源文件
  • 参考与版本

    • 错误码参考
    • 版本历史与更新日志
    • 开发文档中心导航

数据加密与解密

本页介绍 JL_Bluetooth 项目中 extension-libs/decryption 目录项所代表的数据加密与解密能力,说明其在杰理(JieLi)蓝牙生态中的定位、通信安全职责、协议级加解密流程,以及在本仓库中已定位到的相关证据与信息缺口。

Purpose and Scope

本页覆盖的范围:

  • 数据加密与解密在 JL 蓝牙通信体系中的职责与设计意图(为什么需要、用在何处);
  • 加密数据流的协议级流程(发送端加密 → 传输 → 接收端解密);
  • 本仓库中与加解密能力相关的常量、适配器与工具类的已定位证据;
  • 该能力的配置项、失败模式与扩展点(基于现有证据的说明)。

重要说明(信息缺口):本次文档生成过程中,源码探测预算(6 次 ListFiles / Grep / ReadFile 调用)已全部用尽,仍未能在仓库中定位到 extension-libs/decryption 目录下的具体实现类(例如加解密工具类、密钥管理类)。因此,本页中凡是标注"(未在源码验证)"或"(推断)"的内容均为基于 JL 协议公开约定的背景知识,而非本仓库源码的直接引用;凡标注"已定位"的内容均来自实际工具调用结果。请读者以源码为准复核。

与兄弟页面的关系:设备扫描/连接、OTA 固件升级(相关适配器位于 btsmart 模块)、文件管理与音效设置(EqCacheUtil 等)均属于各自目录项,本页不展开;本页仅覆盖与加解密直接相关的部分。

Overview

为什么 JL 蓝牙通信需要加解密

杰理(JieLi)蓝牙方案(本仓库即其 Android SDK 应用示例)中,手机 App 与 JL 蓝牙芯片之间通过 BLE(低功耗蓝牙)或经典蓝牙传输命令帧、状态数据、固件升级包与文件内容。这些数据帧遵循 JL 私有协议。出于以下原因,协议对数据帧实施加密:

  1. 防伪与授权:固件升级(OTA)与设备参数下发需要校验授权,防止非官方 App 或第三方工具随意改写设备;
  2. 防篡改:命令帧若被中间人修改,可能导致设备行为异常,加密与校验可保证完整性;
  3. 数据私密性:设备配置、用户偏好等数据在空口传输时不应明文暴露。

在 JL 协议体系中,这类加解密通常以"流式 XOR 加密 + 密钥协商"或"AES 分组加密"的形式实现,由 SDK 的扩展库(即本目录项 extension-libs.decryption)对外提供统一的加解密入口,应用层(btsmart)通过该入口对上层业务数据透明地进行加密/解密,无需关心具体算法细节。

关键概念

概念含义
明文(Plaintext)应用层产生的原始业务数据
密文(Ciphertext)经加解密模块处理后、实际在蓝牙空口传输的数据
密钥(Key)加解密使用的秘密参数,由协议协商或固定密钥派生
帧(Frame)JL 协议中数据封装的最小单元,通常含头、载荷、校验
XOR 流加密将数据流与密钥流逐字节异或的对称加密方式,实现轻量、适合低算力 MCU
AES高级加密标准,分组对称加密,用于安全性要求更高的场景(如固件加密)

Architecture

注:下图为基于仓库布局与 JL 协议约定的概念架构。虚线部分(应用层 → 加解密模块)为预期调用关系,因 extension-libs/decryption 实现类未能在本次探测中定位,尚未在源码中直接验证。

flowchart TD
    subgraph sg_App["应用层 (code/.../btsmart)"]
        UI["UI 与适配器层<br/>(FirmwareOtaAdapter 等)"]
        Svc["业务服务<br/>(LogService 等)"]
    end

    subgraph sg_Lib["扩展库 extension-libs"]
        Crypt["数据加密与解密模块<br/>(本目录项, 未定位实现)"]
    end

    subgraph sg_Stack["蓝牙协议栈"]
        Proto["JL 协议帧封装"]
        BLE["BLE / 经典蓝牙传输"]
    end

    subgraph sg_Device["设备端"]
        Chip["JL 蓝牙芯片固件"]
    end

    UI --> Svc
    Svc -.->|"预期调用 (未在源码验证)"| Crypt
    Crypt --> Proto
    Proto --> BLE
    BLE <-->|"加密数据流"| Chip

架构说明:

  • 应用层(btsmart):仓库中的 code/PiHome_V1.13.0_SDK_V4.2.0/btsmart 是 Android 应用示例,UI/适配器(如 FirmwareOtaAdapter)与后台服务(如 LogService)构成上层业务;
  • 扩展库(extension-libs):按目录项命名,本页对应的加解密能力应位于此层,向应用层提供 加密(data, key) / 解密(data, key) 之类的统一入口。该层实现类未能在本次探测中定位;
  • 蓝牙协议栈:JL 协议将加解密后的密文封装进协议帧,通过 BLE/经典蓝牙发送到设备端;
  • 设备端:JL 芯片固件内实现对应的解密/加密逻辑,完成双向安全通信。

这种分层设计的意图是:将加解密算法与上层业务解耦,业务方只依赖稳定接口,算法升级(如从 XOR 切换到 AES)不影响调用方;同时把协议帧封装与算法实现隔离,便于针对不同芯片型号适配。

Core Flow(核心流程)

加解密数据流(协议级通用流程)

以下时序图描述 JL 协议约定下的通用加解密数据流。图中的"加解密模块"步骤为协议级描述,本仓库内对应实现类未能在本次源码探测中定位(未在源码验证)。

sequenceDiagram
    participant App as 应用层 (btsmart)
    participant Crypt as 加解密模块 (extension-libs)
    participant Proto as JL 协议层
    participant Chip as JL 设备

    App->>Crypt: 待发送业务数据 (明文)
    Crypt->>Crypt: 按密钥加密生成密文
    Crypt->>Proto: 密文载荷
    Proto->>Proto: 封装协议帧 (头+密文+校验)
    Proto->>Chip: 蓝牙空口传输
    Chip->>Chip: 校验并解密还原明文
    Chip-->>Proto: 构造响应密文帧
    Proto-->>Crypt: 响应密文帧
    Crypt-->>App: 解密后业务数据 (明文)

流程分步解读:

  1. 上行(App → 设备):应用层把业务数据交给加解密模块;模块使用协议约定的密钥对明文做流式加密(XOR)或分组加密(AES),输出密文;
  2. 协议封装:JL 协议层将密文作为载荷封装成帧,附加帧头与校验字段,然后经 BLE/经典蓝牙发送;
  3. 设备端处理:芯片固件收到帧后先做校验,再按相同密钥解密,还原出原始业务数据执行;
  4. 下行(设备 → App):响应路径执行对称操作,保证双向数据均为密文传输。

该"先加密、再组帧、后传输"的顺序是刻意的:加密在协议封装之前进行,使得空口抓包者无法从载荷直接读到业务数据;校验在解密之前进行,先丢弃被篡改或损坏的帧,避免解密出错误数据造成设备误操作。

已收集的源码证据(Gathered Evidence)

本次探测(6 次工具调用)实际收集到的、可在仓库中点击验证的证据如下:

1. 仓库布局

extension-libs.decryption 目录项对应仓库根目录下的扩展库能力。已确认仓库包含 code/PiHome_V1.13.0_SDK_V4.2.0/btsmart/ 应用模块,其 constant/、data/adapter/、ui/、util/ 包结构与 JL SDK 应用示例一致。

2. 协议常量类 SConstant

SConstant.java 中定义了大量字符串常量,例如目录名常量:

public final static String DIR_DESIGN = "design";

Source: SConstant.java

这类常量是协议/业务约定的集中体现,属于与加解密相关的"配置面"证据之一;但本页不能据此断言其中包含密钥常量。

3. 与加密数据消费相关的上层组件(ListFiles 定位)

  • FirmwareOtaAdapter.java:固件 OTA 列表适配器。固件升级数据在 JL 协议中通常以加密形式下发,是该能力最典型的上层消费场景之一;
  • ChargingBinUtil.java:彩屏充电仓工具类(Grep 验证类注释 @desc 彩屏充电仓工具类),充电仓与手机间的数据交互同样走 JL 私有协议;
  • LogService.java:日志后台服务,属于应用层生命周期组件。

以上组件证实了应用层与协议层之间存在大量数据交互,但均不包含加解密算法实现。加解密实现(本目录项核心内容)在本次探测预算内未定位到,属信息缺口。

Usage Examples(使用示例)

No code example available(无可用源码示例)

在本次源码探测预算内,未定位到 extension-libs/decryption 的加解密实现类,因此无法提供可验证的加密/解密调用示例。为避免虚构,此处不展示任何推测性的 API 调用代码。

以下为本仓库中可验证的、与协议数据面相关的真实代码片段(非加解密实现本身),用于展示上层如何引用协议常量:

public final static String DIR_DESIGN = "design";

Source: SConstant.java

如何补充本页示例:当仓库中定位到 extension-libs/decryption 下的实现类后,可将典型的 encrypt(byte[] data, byte[] key) / decrypt(byte[] data, byte[] key) 调用片段补充至本节,并附上对应文件的行号链接。

Configuration Options(配置选项)

配置项类型默认值说明
(未发现)——在本次源码探测中未定位到 extension-libs/decryption 的配置项、密钥常量或默认参数

诚实声明:本目录项的密钥来源(固定密钥 / 协商密钥)、加密算法选择(XOR / AES)、帧校验方式等配置面信息,均依赖实际实现源码,当前处于"未在源码验证"状态。读者如需精确配置,请直接查阅 extension-libs/decryption 目录源码。

API Reference(API 参考)

本目录项的公开展示 API(方法签名、参数、返回值、异常)未能在本次探测中定位,故本节暂不提供任何方法签名。以下为已定位且可验证的常量引用(供参考):

SConstant.DIR_DESIGN

  • 类型:public final static String
  • 值:"design"
  • 说明:协议/业务约定的目录名字符串常量,位于 btsmart 应用模块常量类中。

Source: SConstant.java

待实现类定位后,本节应补充加解密入口的完整签名,例如预期的 byte[] encrypt(byte[] plain, byte[] key) 与 byte[] decrypt(byte[] cipher, byte[] key)(此为占位性预期描述,非源码声明)。

Failure Modes, Edge Cases & Concurrency(失败模式、边界情况与并发)

本节内容基于加解密系统的一般性工程规律给出,均标注"(推断,未在源码验证)"。待 extension-libs/decryption 实现定位后应以实际异常处理逻辑为准。

场景表现缓解措施(推断)
密钥不匹配/版本不一致解密结果乱码、校验失败、命令无响应协议层应带版本号或校验和,密钥协商失败时拒绝通信并上报错误
数据帧被截断/空口丢包帧校验失败先校验后解密,丢弃坏帧并触发上层重传机制
数据包长度不是算法分组长度的整数倍(AES 场景)解密抛 IllegalArgumentException/填充错误组帧时按块对齐并携带填充长度字段
并发发送多条命令若实现为有状态流式加密(XOR 计数器),并发写可能造成加解密状态错乱加解密模块应设计为无状态(单帧独立密钥流)或对密钥流生成加锁
明文/密文数组为空或超长空指针或溢出入口处做长度校验,约定最大帧长

设计意图:JL 协议采用"先校验、后解密"的顺序,就是为了让损坏数据在进入解密逻辑前就被丢弃,避免错误密钥流污染接收状态机;这也是多数蓝牙私有协议的标准做法。

Performance & Operational Considerations(性能与运维)

  • 算力约束(推断):JL 芯片为嵌入式 MCU,算力有限,因此协议倾向选择 XOR 流加密这类轻量算法;手机端加解密开销可忽略,但需注意大文件(如固件包)传输时的内存拷贝次数;
  • 线程模型(推断):加解密不应阻塞 UI 线程;建议在蓝牙回调线程或专用工作线程中执行,btsmart 模块中 LogService 等后台组件的存在表明应用已具备后台处理基础设施;
  • 调试手段:排查通信问题时,建议在加解密模块出口抓取密文并核对密钥版本,空口抓包工具只能看到密文帧,无法直接读取业务数据——这既是安全特性,也意味着调试必须依赖 SDK 侧日志。

Extension Points(扩展点)

  • 算法可替换性(推断):加解密模块与协议帧封装分层隔离(见架构图),理论上支持在同一接口下替换算法实现(XOR ↔ AES)而不影响上层业务;
  • 密钥派生(推断):密钥可通过设备地址、随机数协商等方式派生,派生逻辑应集中在模块内部,避免散落于应用层;
  • 以上扩展点均为架构层面的预期,具体接口(抽象类/接口定义)未在本次探测中定位到源码证据。

Tests(测试)

本次探测未发现针对 extension-libs/decryption 的测试文件。仓库中 code/PiHome_V1.13.0_SDK_V4.2.0/btsmart/src/test/ 或其他测试目录内是否存在加解密单元测试,需在后续探测中确认。典型的测试覆盖建议(推断):密钥一致性、密文往返(decrypt(encrypt(x)) == x)、坏帧/截断帧处理、并发加解密。

Related Links(相关链接)

  • SConstant.java(协议常量类,已定位)
  • FirmwareOtaAdapter.java(固件 OTA 上层消费组件,已定位)
  • ChargingBinUtil.java(彩屏充电仓工具类,已定位)
  • LogService.java(应用层后台服务,已定位)

相关兄弟页面:设备连接与协议栈(若存在对应目录项)、OTA 固件升级、文件管理。当 extension-libs/decryption 源码可读时,本页的架构、API 与配置小节应依据实际实现进行补充更新。

Prev
OTA固件升级
Next
图片与动图格式转换