我使用GreenDAO设置了一个新项目,能够使用DaoGenerator使用ExampleDAO生成.一切正常.
我还在android资源文件夹中提供了一个预先填充的sqlite数据库,在app运行时,它被复制到android数据库系统路径.
现在我想与SqlCipher集成,以加密我的数据库...如果有人可以帮助或提供示例应用程序,那将是一个很大的帮助.
我有一个Xamarin应用程序,并设法将我的数据从我的服务器下载到我的设备.我还设置了它,以便它可以采用SqlCipher加密密钥来加密数据.
我的问题是存储我用于加密此数据的密钥的正确位置在哪里?你是KeyStore/KeyChain吗?我应该使用哪些单声道课程?
我正在使用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) 我在Android上尝试使用SQLCipher.我写了一个小应用程序,在模拟器上创建了一个包含一个表和几条记录的数据库.然后,我将数据库从模拟器拉到我的桌面上.我查看了SQLCipher文档,但我无法弄清楚如何在桌面上实际解密数据库,以便查询其内容.我想确保我实际插入记录.访问记录的最简单的过程是什么?谢谢.
我正在使用SQLCipher for Android.我已经完成了加载lib所需的所有必要的东西,如http://sqlcipher.net/sqlcipher-for-android/中所述
我发现你设置密码即密钥:
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, "test123", null);
Run Code Online (Sandbox Code Playgroud)
那么你的密码如何从黑客那里获得安全保障?因为它可以从java文件中访问.?
有没有正确的方法可以存储密码?
谢谢,Nibs
我正在使用SQLCipher for Android,我正在尝试确定测试用户提供的密码是否有效的正确方法.
我的第一个倾向是尝试使用给定的密码打开数据库,使用SQLCipher实现SQLiteOpenHelper.getReadableDatabase(password),然后捕获SQLiteException弹出的数据库.
这确实有效,但问题是因为Android API实际上包含了底层的C调用,它为你做了很多工作 - 特别是当你使用Android API打开数据库时,它会打开数据库,运行本机C级sqlite3_key方法(使用提供的密码),然后尝试在数据库上设置区域设置,无论提供的密码是否正确.
此时,Android库尝试设置区域设置,底层数据库抛出"加密或不是数据库" SQLiteException,它被捕获并重新抛出; 但在此之前,会将无关的错误写入日志,实质上是说无法设置区域设置并且数据库正在关闭(包含堆栈跟踪).因为这是由Android库专门编写的,所以我无法抑制它,在日志中留下一个实际上与我原来的问题无关的丑陋错误,这只是我传入了错误的密码.
因为Android库不公开C级调用,所以我不能只使用SQLCipher API文档中描述的关于测试密钥的方法,因为我没有权限直接打开数据库.
我倾向于使用SQLiteDatabaseHook,但最好的我能说,这排除了我的使用SQLiteOpenHelper,这似乎没有提供设置钩子的方法.
有没有其他人知道更好的方法来测试输入密码是否通过SQLCipher Android API正确解密SQLCipher数据库?我完全希望调用一个方法并检查抛出的异常 - 我不想要的是操作尝试在数据库上执行无关的处理(如set locale)并在我的日志中写入一个完全不可抑制的错误.
Hiee,我正在使用sqlcipher来读取数据库但是在读取数据之前它会给出以下错误.下面是我的logcat请看看.
E/AndroidRuntime(21826): FATAL EXCEPTION: main
02-27 11:33:10.608: E/AndroidRuntime(21826): java.lang.UnsatisfiedLinkError: Native method not found: net.sqlcipher.database.SQLiteDatabase.dbopen:(Ljava/lang/String;I)V
02-27 11:33:10.608: E/AndroidRuntime(21826): at net.sqlcipher.database.SQLiteDatabase.dbopen(Native Method)
02-27 11:33:10.608: E/AndroidRuntime(21826): at net.sqlcipher.database.SQLiteDatabase. <init>(SQLiteDatabase.java:1942)
02-27 11:33:10.608: E/AndroidRuntime(21826): at net.sqlcipher.database.SQLiteDatabase.<init>(SQLiteDatabase.java:1920)
02-27 11:33:10.608: E/AndroidRuntime(21826): at example.SQLDemoActivity.onCreate(SQLDemoActivity.java:19)
02-27 11:33:10.608: E/AndroidRuntime(21826): at android.app.Activity.performCreate(Activity.java:5020)
02-27 11:33:10.608: E/AndroidRuntime(21826): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-27 11:33:10.608: E/AndroidRuntime(21826): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
02-27 11:33:10.608: E/AndroidRuntime(21826): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)
02-27 11:33:10.608: E/AndroidRuntime(21826): at android.app.ActivityThread.access$600(ActivityThread.java:149)
02-27 11:33:10.608: E/AndroidRuntime(21826): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)
02-27 11:33:10.608: E/AndroidRuntime(21826): at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 11:33:10.608: E/AndroidRuntime(21826): at android.os.Looper.loop(Looper.java:153)
02-27 11:33:10.608: E/AndroidRuntime(21826): at …Run Code Online (Sandbox Code Playgroud) 我在我的Android应用程序数据库中收到此错误.
在SQLite数据库中,我assets借助此代码从文件夹中的脚本获取数据库查询.
manager = context.getResources().getAssets();
input = manager.open("createDb.xml");
xpp.setInput(input, null);
int type = xpp.getEventType();
while(type != XmlPullParser.END_DOCUMENT) {
if(type == XmlPullParser.START_DOCUMENT) {
Log.d(Tag, "In start document");
}
else if(type == XmlPullParser.START_TAG) {
Log.d(Tag, "In start tag = "+xpp.getName());
}
else if(type == XmlPullParser.END_TAG) {
Log.d(Tag, "In end tag = "+xpp.getName());
}
else if(type == XmlPullParser.TEXT) {
Log.d(Tag, "Have text = "+xpp.getText());
String strquery = xpp.getText();
db.execSQL(strquery);
}
type = xpp.next();
}
}
catch (XmlPullParserException e) { …Run Code Online (Sandbox Code Playgroud) 我使用魔法记录来保存我的数据.此数据需要加密,因此我尝试将其与SQLCipher库(http://sqlcipher.net/ios-tutorial/)结合使用.
我已经设置了SQLCipher,并使用此示例中的EncryptedStore文件成功测试了Core Data,https://github.com/project-imas/encrypted-core-data:
我所做的只是像这样改变了NSPersistentStoreCoordinator:
NSPersistentStoreCoordinator*coordinator = [EncryptedStore makeStore:[self managedObjectModel]:[SSKeychain passwordForService:myservice account:myaccount]];
所以我想我需要改变在MagicalRecord中创建NSPersistentStoreCoordinator的方式,但我没有运气,所以任何帮助都会受到赞赏.
我正在尝试在我的Mac上构建SQLCipher并在运行make后出现致命错误.
系统:OS X El Capitan我按照此说明安装了openssl .
在运行make之前,我将libcrypto.a与命令静态链接
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" \
LDFLAGS="/usr/local/opt/openssl/lib/libcrypto.a"
Run Code Online (Sandbox Code Playgroud)
我得到的错误
sqlite3.c:18280:10: fatal error: 'openssl/rand.h' file not found
#include <openssl/rand.h>
^
1 error generated.
make: *** [sqlite3.lo] Error 1
Run Code Online (Sandbox Code Playgroud)