2021年Android平台String最优安全加密方案及Jetpack Security相关疑问
Android String安全加密方案相关问题解答
2021年及之后Android应用推荐的String加密方式
当前官方认可、不会触发Play Store安全告警的通用方案为AES/GCM/NoPadding加密,配套密钥存储在Android系统Keystore中即可。
实现逻辑如下:
- 将需要加密的String转换为字节数组
- 使用符合规范的AES密钥对字节数组执行GCM模式加密
- 将加密后的字节数组(含GCM自动生成的校验tag)转换为Base64字符串,即可存入
AccountManager - 解密时先将Base64字符串转回字节数组,再用密钥解密得到原始字节数组,最后转回String即可
Jetpack Security的作用
Jetpack Security完全可以在这个流程中使用,核心是它提供的MasterKey类可以帮你快速生成符合安全规范的AES密钥:
- 自动适配不同Android版本的Keystore特性,无需自行处理兼容逻辑
- 生成的密钥默认存储在系统Keystore中,无法被导出,安全性远高于手动生成存储的密钥
- 规避了开发者自行实现密钥生成逻辑时容易出现的安全漏洞
Jetpack Security默认不支持String加密的原因
Jetpack Security官方仅封装File和SharedPreferences的加密能力,是因为这两类是Android开发者最常用的本地持久化场景,统一封装可以降低绝大多数开发者的使用门槛。
而String加密的使用场景差异极大:有的开发者需要将加密后的String存入数据库、有的需要传递给后端服务、有的需要存入AccountManager,不同场景对加密结果的格式、编码要求完全不同,官方无法做通用封装,因此仅开放底层的密钥生成、密码学基础能力,由开发者结合自身业务场景自行实现上层逻辑。
内容的提问来源于stack exchange,提问作者Roberto Leinardi
相关产品推荐
相关产品推荐

