Android 在运行时保持数据解密

Android 在运行时保持数据解密,android,security,encryption,android-keystore,Android,Security,Encryption,Android Keystore,在我的应用程序中,我生成并保存私钥。它们使用AES进行加密,如下所述()。我看到了关于smiliar subject()的另一个条目,但是这个解决方案不能保证在所有设备上都能工作 除了一件事,一切都很好。每次usertime想要访问其中一个加密文件(或创建新文件),他都需要输入pin/密码(这非常令人沮丧)。我正在寻找一种方法来避免这种情况,所以只要用户不离开应用程序,他的密码就会被存储 我找到的唯一解决方案是在用户输入密码后加载所有内容并将其保存在内存中,但我认为这不是一个好方法。为什么不创建

在我的应用程序中,我生成并保存私钥。它们使用AES进行加密,如下所述()。我看到了关于smiliar subject()的另一个条目,但是这个解决方案不能保证在所有设备上都能工作

除了一件事,一切都很好。每次usertime想要访问其中一个加密文件(或创建新文件),他都需要输入pin/密码(这非常令人沮丧)。我正在寻找一种方法来避免这种情况,所以只要用户不离开应用程序,他的密码就会被存储


我找到的唯一解决方案是在用户输入密码后加载所有内容并将其保存在内存中,但我认为这不是一个好方法。

为什么不创建一个自定义应用程序子类,并将密码存储在那里

比如:

public class App extends Application {
    private static String sPassword;

    public String getPassword() {
        return sPassword;
    }
}
然后使用它:

String password = ((App) context.getApplication()).getPassword();
if(password != null && !password.isEmpty() {
    // Decrypt files
} else {
    // Prompt user for password, and save it to the Application
}
您还必须在清单中指定自定义应用程序:
将密钥缓存一段特定类型的时间(比如10分钟),然后清除它们。您可以为此使用
AlarmService
设置报警。有一个图书馆项目为您提供了这一功能,但我没有亲自使用它:


注意:您不应该将密码保留为字符串,因为您以后无法控制它,您最好将其保留为char[]。看看这个答案: