我正在使用此代码段来加密/解密我的应用程序数据库中的数据:
http://www.androidsnippets.com/encryptdecrypt-strings
似乎javax.crypto.KeyGenerator.generateKey()操作在Android 2.3.3操作系统中的工作方式与其他(以前的?)版本不同.当然,这会给我的用户带来一个主要问题,当他们将设备从2.2升级到2.3.3并且应用程序开始抛出解密数据库的错误.
这是一个已知的问题?我是否错误地使用了加密库?任何人都有任何关于如何解决这个问题的建议,以便2.2中加密的数据能够在2.3.3中解密?
我构建了一个测试应用程序,通过加密功能提供值.当我在2.2 AVD上运行它时,我得到一个结果.当我在2.3.3 AVD上运行时,我得到了不同的结果.
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class main extends Activity {
TextView tvOutput;
static String out;
String TEST_STRING = "abcdefghijklmnopqrstuvwxyz";
String PASSKEY = "ThePasswordIsPassord";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvOutput = (TextView) findViewById(R.id.tvOutput);
}
@Override
public void onResume() {
super.onResume();
out = "";
runTest();
tvOutput.setText(out);
}
private void runTest() …Run Code Online (Sandbox Code Playgroud) 我已经查看了文档和示例BackupRestore应用程序,并编写了我自己的测试应用程序实现android:backupAgent.我扩展了BackupAgent课程,因为我主要担心的是能够从数据库备份数据.我甚至无法使用此功能制作一个简单的概念验证应用程序.
为了使事情变得非常简单,我宣布android:backupAgent为MyBackupAgent在清单.然后我创建了一个MyBackupAgent.java类,扩展BackupAgent.然后我为类中的onBackup()和onRestore()方法创建了覆盖MyBackupAgent,就像在示例和文档中一样.我Log.i()在每个函数的最开头添加了一个调用,以便在调用函数时可以在LogCat中识别.同样,我在这两个方面都设置了断点.然后我继续实现我的代码来备份数据库.
我使用2.2w/Google API创建了一个模拟器图像,甚至在Accounts&Sync下添加了一个gmail帐户.运行adb命令以启用bmgr,备份应用程序,运行备份,卸载应用程序,重新安装应用程序等....我从来没有从Log.i()命令中的任何一个onBackup()或onRestore()函数中获取日志文件中的消息.
我在我的Evo 4g上再次尝试2.2.结果相同.备份管理器似乎没有在类中调用onBackup()和onRestore()函数MyBackupAgent.
我在日志中得到的唯一奇怪信息是来自BackupManagerService"备份传递但e = true p = false",我相信在响应ADB命令备份应用程序时.
有什么建议?我错误地认为和函数中的Log.i()语句会出现在LogCat中吗?onBackup()onRestore()