📦 模块四:数据安全模块(Security Module)
本模块为 DeviceHealth 项目 提供统一的数据加解密能力,用于敏感日志与配置数据的安全存储。
模块目标:
业务模块通过调用本模块提供的接口即可完成数据加密与解密操作。
一、模块职责
- 提供统一的 文本加解密接口
- 提供 日志字段级加密 / 解密接口
- 支持敏感字段(如日志
detail / extra)加密存储 - 与 UI、数据库模块解耦,作为底层安全能力模块
二、代码结构
entry/src/main/ets/
├─ security/
│ ├─ CryptoUtil.ets # 底层加解密工具(AES-GCM)
│ └─ SecurityService.ets # 对外统一安全服务
│
├─ model/
│ └─ EncryptedData.ts # 加密数据模型
│
├─ test/
│ ├─ CryptoUtilTest.ets
│ ├─ SecurityServiceTest.ets
│ └─ EncryptedDBTest.ets
三、核心接口说明(对外使用)
1️⃣ 文本加解密接口
适用于:配置数据、敏感字符串等。
SecurityService.encryptText(plainText: string): EncryptedData
SecurityService.decryptText(data: EncryptedData): string
2️⃣ 日志字段加解密接口(推荐使用)
日志明文结构
interface PlainEventLog {
type: string
level: number
timestamp: number
detail?: string
extra?: string
}
加密日志字段(写数据库前)
SecurityService.encryptLogFields(log: PlainEventLog): EncryptedEventLogRow
仅加密 detail / extra
type / level / timestamp 保持明文,便于查询和统计
解密日志字段(从数据库读取后)
SecurityService.decryptLogFields(row: EncryptedEventLogRow): PlainEventLog
四、各模块使用建议
模块 1:系统监控模块
type: 'BATTERY',
level: 1,
timestamp: Date.now(),
detail: 'Battery level low',
extra: 'Current level: 15%'
}
// 写库前调用
const encryptedRow = SecurityService.encryptLogFields(log)
EventDB.insert(encryptedRow)
模块 2:配置管理模块
是否启用加密由配置项(如 isLogEncryptionOn)控制
if (settings.isLogEncryptionOn) {
encryptedRow = SecurityService.encryptLogFields(log)
}
模块 3:UI / 通知模块
const plainLog = SecurityService.decryptLogFields(dbRow)
模块 5 / 6:集成与测试
模块四已提供单元测试:
CryptoUtil
SecurityService
加密数据库流程
在 Previewer 环境下:
加密与编码接口为 mock 实现
测试采用 结构 + 流程验证
真机环境支持完整加解密能力