为 Android 移动应用程序加密数据

信息安全 加密 移动的 密钥管理 爪哇 安卓
2021-09-08 11:06:41

我正在为 Android 创建一个移动应用程序。顺便说一句,这是我的第一个移动应用程序。

我决定将我的应用程序中使用的数据存储在目标 Android 设备的 SQLite 数据库中。

我存储的数据是关于用户的财务数据,所以我决定在存储到数据库之前对数据进行加密。但是我不想把所有的手机资源都花光做加解密。

BouncyCastle 可以解决问题。但我担心如果有人反编译代码,获取安全密钥并解密数据。有没有其他选择。欢迎您的任何想法。

1个回答

不要将硬编码的密钥嵌入到您的应用程序中;对于任何对您的应用程序进行逆向工程的人来说,这只不过是一种微不足道的混淆。

要生成用于加密的密钥,请使用PBKDF2等密钥派生算法,该算法本质上对密码执行数百轮哈希函数,将结果组合在一起以生成安全密钥。为了帮助理解为什么需要密钥派生算法,请查看其他答案

PBKDF2 的好处是:

  • 可配置的轮数,为您的设备定制计算速度,同时保持合理的安全裕度以防止暴力破解。
  • 可证明的安全性,即它至少与底层散列函数一样强。
  • 可以生产任何尺寸的钥匙。
  • 易于实现(已经为您提供了 Java 实现

本质上,您让用户输入他/她的密码,然后使用 PBKDF2 计算密钥,然后使用该密钥解密/加密数据。

现在,就实际加密而言,如果您以前没有处理过加密,我强烈建议您坚持使用简单的方法。分组密码必须在操作模式下使用,并且需要初始化向量 (IV) 以确保安全。有很多实现细节必须完全正确才能真正安全,所以在这种情况下,我建议阅读这里的各种其他问题以进一步了解它们。