如何将密码传递给sqlcipher ContentProvider

时间:2016-05-18 21:50:30

标签: android android-contentprovider password-protection sqlcipher

我试图在我的应用中实施一个安全数据库,要求用户在启动应用时输入密码。他们输入的密码用于解密包含其数据的sqlcipher数据库。我难以理解的部分是如何将密码传递给内容提供者。

现在我暂时将密码存储在共享首选项中,以便我的contentprovider访问它,然后在我的MainActivity中调用onStop时删除共享首选项。但是,一旦我引入了多项活动,这似乎过于复杂。是否有更有效的方法为我的sqlcipher ContentProvider设置当前应用会话的密码?

1 个答案:

答案 0 :(得分:-1)

  

我难以理解的部分是如何将密码传递给内容提供商。

选项#1:不要使用ContentProvider

选项#2:在call()上使用ContentResolvercall()会在ContentProvider上调用call()。这是一个ad-hoc通信路径,您可以在其中基本定义其含义。您可以将其用作"设置密码"一种机制,您的UI层收集密码并通过minSdkVersion将其传递给提供商。请注意,这需要private void FragmentCommit(FragmentTransaction transaction, Fragment fragment, String fragmentTagName){ transaction .replace(R.id.main_activity_fragment, fragment, fragmentTagName) .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .transaction.addToBackStack(fragmentTagName) .commit(); 为11或更高。

在这两者中,我强烈推荐选项#1。

  

现在我暂时将密码存储在共享首选项中,以便我的contentprovider访问它,然后在我的MainActivity中调用onStop时删除共享首选项。

以密文形式将密码短语写入磁盘。 请不要这样做