为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Android中加密和解密文件?

如何在Android中加密和解密文件?

湖上湖 2019-08-30 15:02:57
我想加密文件并将其存储在SD卡中。我想解密该加密文件并再次将其存储在SD卡中。我试图通过打开文件流加密文件并加密但是它不起作用。我想知道如何做到这一点。
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

使用a CipherOutputStream或CipherInputStreama Cipher和你的FileInputStream/ FileOutputStream。


我建议像Cipher.getInstance("AES/CBC/PKCS5Padding")创建Cipher课程一样。CBC模式是安全的,并且没有针对非随机明文的ECB模式的漏洞。它应该存在于任何通用加密库中,以确保高兼容性。


如果要使用相同的密钥加密多个文件,请不要忘记使用由安全随机生成器生成的初始化向量(IV)。您可以在密文开头加上普通IV的前缀。它总是正好一个块(16字节)。


如果您想使用密码,请确保使用良好的密钥派生机制(查找基于密码的加密或基于密码的密钥派生)。PBKDF2是最常用的基于密码的密钥派生方案,它存在于大多数Java运行时中,包括Android。请注意,SHA-1是一个有点过时的哈希函数,但它在PBKDF2中应该没问题,并且目前提供最兼容的选项。


在编码/解码字符串时始终指定字符编码,否则当平台编码与前一个编码不同时,您将遇到麻烦。换句话说,不要使用String.getBytes()但使用String.getBytes(StandardCharsets.UTF_8)。


为了使其更安全,请通过在密文和IV上添加安全校验和(MAC或HMAC)来添加加密完整性和真实性,最好使用不同的密钥。如果没有认证标签,则可以以不能检测到改变的方式改变密文。


请注意,CipherInputStream 可能 不会报告BadPaddingException,这包括BadPaddingException为经过身份验证的密码生成,例如GCM。这将使流不兼容并且对于这种经过验证的密码不安全。


查看完整回答
反对 回复 2019-08-30
?
青春有我

TA贡献1784条经验 获得超8个赞

您可以使用java-aes-crypto或Facebook的隐藏


Java的AES-密码


从回购报价中引用


一个简单的Android类,用于加密和解密字符串,旨在避免大多数此类遭受的经典错误。


Facebook的隐瞒


从回购报价中引用


Conceal提供简单的Android API,用于执行数据的快速加密和身份验证


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 963 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信