用于加密Android上的图像的对称与非对称加密

时间:2016-05-05 07:50:12

标签: android encryption

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

首先想到使用AES并做了一些谷歌搜索以确定它的安全性。每次输入16或32个字符(更好的安全性,我希望)密码似乎不方便。作为替代方案,我想到了非对称加密。使用一个密钥进行加密并使用另一个密钥进行解密,这样我就可以将用于加密的密钥保留在内存中,并仅在需要解密数据时使用其他密钥(例如在PC上或其他应用程序上脱机)。

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

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

编辑:描述两种方法。

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

方法2:使用基于私钥/公钥的RSA加密。保留一个密钥,即用于设备加密的密钥。在解密期间使用另一个密钥,这几乎不会执行。

1 个答案:

答案 0 :(得分:0)

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

重要的是要记住,RSA可以加密不超过其密钥长度的数据(减去填充的一些数据),因此在大多数情况下单独使用RSA是不够的。

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

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

你不能很好地描述你的问题,但如果是我,我会使用AES。

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

  • 从不使用ECB模式。
  • 从不使用纯ASCII字节作为密钥。您应该使用PBKDF2或类似的方法来获取密钥,通常100,000轮是好的。
  • 始终使用安全的RNG来创建您的IV(如果您的密码模式使用一个,有些像CTR一样,请使用nonce,但概念几乎相同)。
  • 始终请记住AES 确保完整性。在解密之前使用MAC来检测密文中的更改。