本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
安全
在设备上保护数据的两大实用支柱:加密数据库和把生物识别作为访问入口。
加密数据库(SQLite3MC)
用一把密钥打开 SQLite——默认采用 ChaCha20-Poly1305 加密(或 SQLCIPHER):
byte[] chave = derivarChaveDaSenha(senhaUsuario); // ⚠️ 用 KDF 从密码派生 — 切勿硬编码
try (SqliteDb db = SqliteDb.open("cofre.db", chave)) {
// … 透明加密的数据 …
db.rekey(novaChave); // 更换密钥(例如用户改密码时)
}
- 无密钥时零成本,有密钥时透明加密——无密钥就是普通 SQLite;有密钥时,一切都在访问时加密/解密,无需改动你的 SQL。
- 绝不要硬编码密钥。 用 KDF 从用户密码派生;只把必要的材料保存在平台的密钥库中。
- 在移除加密(用
rekey解除保护)时要小心——文件会变为明文可读。
把生物识别作为访问入口
在进入敏感区域(财务、个人数据)之前,要求生物识别:
if (Biometry.isAvailable()) {
Biometry.authenticate("Acessar cofre", "Cancelar", false,
(res, msg) -> Component.onUI(() -> {
if (res == Biometry.AuthResult.SUCCESS) abrirCofre();
else loginPorSenha(); // 始终有 fallback
}));
} else {
loginPorSenha();
}
- 生物识别数据永不离开设备——应用只收到
SUCCESS/FAILURE/等结果。 - 生物识别是本地认证:它补充而非取代应用层的认证(服务器登录)。
其他注意事项
- 剪贴板: 不要把秘密信息复制到剪贴板(
Device.clipboardCopy)——它对其他应用是可访问的。 - 文件/
homeFolder:Device.homeFolder中的数据默认不加密——对敏感内容请使用加密数据库。 - 日志: 不要用
Debug.log记录密码/令牌。
最佳实践
- 敏感数据 → 加密 SQLite;密钥从密码派生(KDF),绝不写在代码里。
- 生物识别作为本地入口 + 始终提供应用层的兜底方案。
- 不要把秘密放进剪贴板、明文文件或日志。
常见错误
- 在代码中硬编码密钥(任何人都能从二进制中提取)。
- 把生物识别当作可以取代服务器登录。
- 把令牌/密码保存在
homeFolder中未加密的文件里。
另请参阅
这个页面有帮助吗?感谢你的反馈!