android - 在 Android 上加密图像的对称加密与非对称加密

标签 android encryption

我正在尝试创建一个 Android 应用程序,它可以即时加密数据并将其写入存储。已经在没有加密的情况下实现了该应用程序,在 stackoverflow 上检查了 100 多个加密示例/帖子,但无法决定使用哪种方法。

起初想到使用 AES 并进行了一些谷歌搜索以了解它的安全性。每次输入 16 或 32 个字符(我希望安全性更高)的密码似乎并不方便。作为替代方案,我想到了非对称加密。用一个 key 加密并用另一个 key 解密,这样我就可以将用于加密的 key 留在内存中,只有在数据需要解密时才使用另一个 key (比如在 PC 上离线,或在另一个应用程序上)。

将被加密的文件主要是图像、视频、录音、办公文档。

第二种方法是否会留下任何漏洞?如果我需要平衡速度和安全性,那么在 AES 和 RSA 之间哪个更好。数据不是绝密,只是需要防止落入坏人之手。设备未加密,运行 KitKat。这两种方法抵御某种攻击的能力如何?

编辑:描述两种方法。

方法 1:使用基于密码的 AES 加密,在应用程序启动时手动输入 16/32 字符的密码,在某些时间/某些触发后从内存中清除密码。需要时再次输入密码。

方法 2:使用基于私钥/公钥的 RSA 加密。留下一把 key ,那把用于在设备上加密。在几乎不执行的解密过程中使用另一个 key 。

最佳答案

这个问题有点难回答,因为你实际上没有描述任何方法,你只是命名了两种加密算法。如果正确实现,这两种算法都非常安全,可以满足您的需求。

请务必记住,RSA 加密数据的长度不能超过其 key 长度(减去一些用于填充的长度),因此在大多数情况下,仅使用 RSA 是不够的。

如果您只是在单个设备上加密信息并希望用户控制何时加密和解密,例如使用密码,您可以使用 PBKDF2 以密码字符串作为输入派生出 x 长度的 key (例如,对于 AES256,32 字节)。

如果您不打算利用 RSA 的非对称属性,就不要费心使用 RSA。在大多数情况下(但不是全部),如果不涉及服务器或其他方,RSA 是多余的。

您没有过多描述您的问题,但如果是我,我会使用 AES。

使用 AES 时,请牢记以下几点:

  • 永远不要使用 ECB 模式。
  • 从不使用纯 ASCII 字节作为 key 。您应该使用 PBKDF2 或类似工具来派生 key ,通常 100,000 轮就可以了。
  • 始终使用安全的 RNG 来创建您的 IV(如果您的密码模式使用一个,有些,例如 CTR,则使用 nonce,但概念几乎相同)。
  • 始终记住 AES 确保完整性。在解密之前使用 MAC 检测密文的变化。

关于android - 在 Android 上加密图像的对称加密与非对称加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37045287/

相关文章:

java - addValueEventListener后ArrayList变为null

JAVA解密错误: Needs Input to be multiple of 16

python - 使用 M2Crypto 加密文件

javascript - 使用 node.js 通过 HTTP 将文件加密为字符串

encryption - 逆向工程特定的蓝牙通信协议(protocol)

android - 使用 Jetpack EncryptedFile 安全性进行图像加密

java - Android,播放音频剪辑的多个 ImageButtons

android - 改造 onResponse 和 onFailure 方法没有被调用

android - Firebase Firestore 子集合安全查询

java - 无法使用 PowerMock 覆盖最终类的静态最终变量