我正在处理的应用程序从sdcard获取所有文件,但这些文件非常重要,应用程序应该保持安全问题。所以有一种方法可以加密或锁定包含该文件的文件夹或目录使用密钥只能由我的应用程序使用? 请帮助我成为新手,并坚持到这一步。
答案 0 :(得分:3)
在Android上,存储在SD卡上的任何内容都不受权限保护,任何有权触摸SD卡的应用程序(以及任何可以将卡拉出并在别处读取的人)都可以访问。基本上,您需要假设如果您将资源放在那里,任何人都可以访问它们。所以,你是对的,你想加密这些资源,这样即使有了这种访问,也没有人可以访问它们。
Android包含对众所周知的加密技术的大量支持。在这种情况下,您将需要使用对称加密。目前最好的做法是使用带有256位密钥的AES,所有这些都在Android类库中本机支持。在线开发人员文档中有很多关于如何执行此操作的资源,您需要考虑所有需要考虑的问题以及整个过程的代码示例,Application Security for the Android Platform(免责声明:我'本书的作者)。
您确实需要一个密钥来加密这些数据,并且您需要保密该密钥(知道它的任何人都可以解密数据)。您有两种选择...(1)每次使用应用程序时都要求用户输入密码,然后从该密码派生密钥,或者(2)将密码存储在您的应用程序中。 (2)是危险的,因为Android应用程序可以很容易地进行逆向工程,攻击者可以简单地查看你的应用程序并找到密钥。 (1)是首选,因为没有密钥存储供攻击者恢复...权衡是您的用户需要输入密码才能使用您的应用程序。你应该做的是风险分析的一个功能......这些数据有多重要?您是否需要以强有力的方式保护它,或者您是否正在保护它以使攻击者更难?只有您可以根据您的使用案例和数据的敏感度/风险来回答这个问题。
答案 1 :(得分:-1)
查看这些资源:
http://source.android.com/tech/encryption/android_crypto_implementation.html
http://developer.android.com/reference/javax/crypto/package-summary.html
您应该知道,您当然不应该以明文形式将密钥存储到加密数据中,而应使用用户可以选择的密码或类似密码对其进行加密。
答案 2 :(得分:-2)
这是制作新文件夹的方法:
String SaveFolder = "/Save";
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
File mySaveFolder = new File(extStorageDirectory + SaveFolder);
mySaveFolder.mkdir();
在public void onCreate
中获取此代码
现在它创建了一个名为“Save”的文件夹。
编辑: 我看起来没有办法设置密码或其他东西。 虽然我在这里阅读http://developer.android.com/guide/topics/data/data-storage.html#filesInternal但是可以将文件保存在内部存储器中,用户也无法访问,但我从未使用过,所以我无法帮助你。