我需要使用SQLCipher for android ...我已经使用SQLite创建了我的应用程序,并希望将其转换为SQLCipher.
问题是,我对SQLCipher一无所知.
我在这个链接中读过它:http://sqlcipher.net/sqlcipher-for-android/
但我还是不太清楚.我想知道你是否可以为Android教程提供一些基本的sqlcipher,其中所有内容都是从绝对基础知识中轻松教授的.
谢谢!
问题很简单
我有的是:
我需要的是:
我有一个SQLCipher数据库加密和CoreData的问题:当我使用持久存储协调器与SQLCipher时,它会在第一次重新启动应用程序后始终崩溃并出现故障一对多关系.因此,当我第一次启动应用程序时,我创建了具有关系的NSManagedObjects,然后,当我保存数据库并重新打开应用程序时,当我尝试访问这些关系时它会崩溃.没有SQLCipher一切正常.
以下是SQLCipher持久存储初始化的代码:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (!_persistentStoreCoordinator) {
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyApp.sqlite"];
NSDictionary *options = @{EncryptedStorePassphraseKey: @"MyApp",
EncryptedStoreDatabaseLocation: storeURL};
NSError *error;
_persistentStoreCoordinator = [EncryptedStore makeStoreWithOptions:options managedObjectModel:[self managedObjectModel] error:&error];
if (error) {
NSLog(@"%@", error);
}
}
return _persistentStoreCoordinator;
}
Run Code Online (Sandbox Code Playgroud)
我创建NSManagedObject的代码:
- (id)createObjectWithClassName:(NSString *)name
{
NSManagedObject *object = [[NSClassFromString(name) alloc] initWithEntity:[NSEntityDescription entityForName:name inManagedObjectContext:self.context] insertIntoManagedObjectContext:self.context];
return object;
}
Run Code Online (Sandbox Code Playgroud) 我有以下SqlCipher数据库.它在我第一次安装应用程序时工作正常,但如果我关闭,从最近的历史记录中移除应用程序(在堆栈外)并重新打开应用程序,它崩溃时出现以下错误.一旦遇到异常,db就不会打开,例如我在Activity中放置一个1/0来强制它崩溃,同样的情况发生在下面.
07-20 15:39:05.669: E/Database(21425): CREATE TABLE android_metadata failed
07-20 15:39:05.669: E/Database(21425): Failed to setLocale() when constructing, closing the database
07-20 15:39:05.669: E/Database(21425): net.sqlcipher.database.SQLiteException: file is encrypted or is not a database
Run Code Online (Sandbox Code Playgroud)
.
我发现以下链接似乎可以解决问题(我不确定它是否是解决方案),但我不确定如何将其实现到我的代码中.任何人都可以帮忙或告诉我为什么我收到此错误?
http://rootslash.net/88542/sqlcipher-cant-open-database-after-apprestart
这是我的数据库代码,我使用SqlCipher SQLiteOpenHelper来创建数据库.我想我需要修改这个代码,以便它返回一个DB对象(如果已存在)并创建一个(如果它不存在).我只是不确定如何.
提前致谢.
[EDIT1]我有一个LoginActivity来验证用户的凭据.如果它们是有效的,它会加载MenuActivity,我在其中放置1/0来强制崩溃.崩溃后,如果我重新打开应用程序,它会在登录数据库用户表行的LoginActivity中崩溃.
DBModel是一个具有SqliteOpenHelper和CRUD方法的类.
因此它在DBModel类中的checkUserInDB()崩溃,后者又调用queryAllFromUser().
07-25 13:45:43.043 10654-10654/? E/AppObj? Build.SERIAL = SH43PWM07311
07-25 13:45:43.203 10654-10654/? E/AppObj? secretKey = com.android.org.bouncycastle.jcajce.provider.symmetric.util.BCPBEKey@31a79cea
07-25 13:45:43.643 10654-10654/? E/Database? CREATE TABLE android_metadata failed
07-25 13:45:43.643 10654-10654/? E/Database? Failed to setLocale() when constructing, closing the database
net.sqlcipher.database.SQLiteException: file is encrypted or is …Run Code Online (Sandbox Code Playgroud) 我使用FMDB在Swift中创建了一个SQLite数据库.但现在我想加密它.那么有谁能帮助我使用'FMDB/SQLCipher'加密和解密SQLite数据库的Swift版本?我无法找到一个很好的教程来理解这一点.
我正在使用sqlcipher.jar来加密android中的数据库,并使用它的本机库
libs/armeabi文件夹
1)libdatabase_sqlcipher.so
2)libsqlcipher_android.so
3)libstlport_shared.so
和
libs/x86文件夹
1)libdatabase_sqlcipher.so
2)libsqlcipher_android.so
3)libstlport_shared.so
我已导入的libs /文件夹中名为sqlcipher.jar的 jar文件
现在每件事情都工作正常,数据库正在提取,从sqlite读取也工作正常,我也没有在SQLiteDatabase.loadLibs(context)中得到任何错误; 线
但是我想在我的项目中实现OCR来实现这一点我从这个http://code.google.com/p/tesseract-ocr/和https://github.com/rmtheis/导入名为tess-two的项目tess-two有一个名为tess-two文件夹的库
我正在将该项目库导入到我的android项目中,我清理了我的项目并在那时运行它我得到了SQLiteDatabase.loadLibs(context)行中的错误;

再次,当我删除tess-two库并从设备卸载并干净并构建并运行它工作正常没有错误发生,我想在我的项目中也有人帮助我的OCR功能
有没有办法加密我的Android应用程序的数据库,减少应用程序的大小?我已经尝试了SQLcipher,但它增加了我的应用程序的大小10MB,这是巨大的.
我使用GreenDAO设置了一个新项目,能够使用DaoGenerator使用ExampleDAO生成.一切正常.
我还在android资源文件夹中提供了一个预先填充的sqlite数据库,在app运行时,它被复制到android数据库系统路径.
现在我想与SqlCipher集成,以加密我的数据库...如果有人可以帮助或提供示例应用程序,那将是一个很大的帮助.
我正在使用greendao ORM.我正在尝试使用SQLCipher加密我的数据库.Greendao自动支持sqlcipher.所以我写了以下加密代码.
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "encrypted-db",null);
Database db = helper.getEncryptedWritableDb("mySecretPassword");
DaoSession session = new DaoMaster(db).newSession();
return session;
Run Code Online (Sandbox Code Playgroud)
但是,每当我使用此会话执行任何数据库操作时,都会出错
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/greenrobot/greendao/database/DatabaseOpenHelper$EncryptedHelper;
at org.greenrobot.greendao.database.DatabaseOpenHelper.checkEncryptedHelper(DatabaseOpenHelper.java:121)
at org.greenrobot.greendao.database.DatabaseOpenHelper.getEncryptedWritableDb(DatabaseOpenHelper.java:133)
Run Code Online (Sandbox Code Playgroud)
我的gradle依赖是 - >
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.0'
compile 'org.greenrobot:greendao:3.2.0'
compile 'com.google.code.gson:gson:2.8.0'
Run Code Online (Sandbox Code Playgroud)
我的计划是
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
# If you do not use Rx:
-dontwarn rx.**
Run Code Online (Sandbox Code Playgroud)
那么如何使用greendao和SQLCipher加密我的数据库?
PS:Database db = helper.getEncryptedWritableDb("mySecretPassword");
此行在执行任何数据库操作时生成错误.
Database db …Run Code Online (Sandbox Code Playgroud)