我正在使用Android的SQLCipher库来加密/解密DB文件.我遵循API中讨论的添加库的确切步骤.
但是当我运行项目时,我收到一个不满意的链接错误...这是logcat ...
11-15 13:12:08.482: ERROR/AndroidRuntime(340): java.lang.UnsatisfiedLinkError: dbopen
11-15 13:12:08.482: ERROR/AndroidRuntime(340): at info.guardianproject.database.sqlcipher.SQLiteDatabase.dbopen(Native Method)
11-15 13:12:08.482: ERROR/AndroidRuntime(340): at info.guardianproject.database.sqlcipher.SQLiteDatabase.<init>(SQLiteDatabase.java:1876)
11-15 13:12:08.482: ERROR/AndroidRuntime(340): at info.guardianproject.database.sqlcipher.SQLiteDatabase.openDatabase(SQLiteDatabase.java:870)
11-15 13:12:08.482: ERROR/AndroidRuntime(340): at info.guardianproject.database.sqlcipher.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:904)
11-15 13:12:08.482: ERROR/AndroidRuntime(340): at info.guardianproject.database.sqlcipher.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:107)
11-15 13:12:08.482: ERROR/AndroidRuntime(340): at com.myproject1.getInstance(AppData.java:60)
Run Code Online (Sandbox Code Playgroud)
请给我任何参考或提示.
我在SQLCiper尝试一件事.
这件事在SQLite数据库中取得了成功 SD-CARD
1-创建一个应用程序firstApp.与数据库在SD-CARD
2-创建的第二应用程序secondApp.
我试图在我的第二个应用程序中读取SD-CARD中的数据.
编辑: - SDCARD中的我的数据库.
public class SdcardCipherDataBase extends SQLiteOpenHelper
{
public static final String DATABASE_FILE_PATH = "/sdcard";
public static final String DATABASE_NAME = "sdCipherDatabase";
public final static String NAME ="name";
public final static String ADDRESS ="address";
public final static String CITY ="city";
public SdcardCipherDataBase(final Context context) {
super(context,Environment.getExternalStorageDirectory()+File.separator+DATABASE_FILE_PATH + File.separator + DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
try
{
db.execSQL( "CREATE TABLE information(_id INTEGER PRIMARY KEY …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的方式,但我没有运气,所以任何帮助都会受到赞赏.
我当时并不需要本地化数据文件icudt46l.zip,但如果我不在Nexus 5中包含它,我会收到运行时错误:
E/AndroidRuntime(4341): Caused by: net.sqlcipher.database.SQLiteException: not an error
这意味着,总体而言,几乎额外的文件7MB都需要SQLCipher的Android:
- 2.7MB资产/ icudt46l.zip
- 0.2MB的lib/armeabi/libdatabase_sqlcipher.so
- 2.3MB的lib/armeabi/libsqlcipher_android.so
- 0.4MB的lib/armeabi/libstlport_shared.so
- 0.1MB lib/commons-codec.jar
- 1.1MB lib/guava-r09.jar
- 0.1MB lib/sqlcipher.jar
是否其他人都需要包含文件icudt46l.zip?
嗨,我正在运行的应用程序,我已经有一个现有sqlite的数据库.现在问题是任何人都可以sqlite database从设备中拔出并可以使用它.现在我需要encrypt the sqlite file.我发现它SQLCipher用于加密sqlite数据库.但真正的问题是我没有任何想法,SQLCipher也不知道它是如何工作的.尝试使用不同的项目.什么都没有帮助.请有人告诉我如何加密我的sqlite数据库.
提前致谢.
我很长一段时间一直在寻找解决问题的方法,我只想与可能遇到同样问题的其他人分享我的解决方案.
我来自Eclipse IDE开发Android应用程序,我想查看Android Studio IDE.所以我下载了当前的Android Studio(BETA v0.8.6),到目前为止我真的很喜欢Android Studio的功能.
我的问题:我正在使用SQLCipher库将加密的数据库包含到我的项目中.不幸的是,将SQLCipher集成到Android Studio中并不像他们在官方SQLCipher网站上所说的那样(因为howto是为Eclipse IDE编写的).所以我在网上搜索将SQLCipher集成到Android Studio的解决方案,因为我无法将其导入到我的主活动java类中.
我的解决方案:您从官方网站下载SQLCipher版本.在该文件夹中,您将看到两个文件夹."assets"文件夹和"libs"文件夹.
在"libs"文件夹中,每个支持的体系结构都有*.jar文件和一些文件夹,其中包含一些*.so文件.
现在,您执行以下操作:
现在启动Android Studio并打开您的项目.在Android Studio中,您可以在左侧的树状视图中看到这些文件.
现在在grade.build文件中,确保此代码片段包含在文件的底部:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Run Code Online (Sandbox Code Playgroud)它现在看起来应该类似于:
apply plugin: 'com.android.application'
android {
compileSdkVersion 'android-L'
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.example.testapp"
minSdkVersion 15
targetSdkVersion 'L'
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = …Run Code Online (Sandbox Code Playgroud)我正在尝试向程序中添加一些代码以加密我使用的sqlite数据库。我试图提示用户输入密码,并使用该密码创建新的加密数据库(如果不存在),或者解密并加载现有的数据库。我似乎找不到很多文档,而且我不确定该怎么做。我的代码如下:
if encryption is True:
print("***PYPER TIMESHEET UTILITY***")
print("\nEnter encryption password below:")
key = getpass.getpass()
DB_NAME = ".timesheet.db"
engine = create_engine('sqlite:///{}'.format(DB_NAME), module=sqlite)
else:
print("WARNING: Unencrypted session. Install pysqlcipher3 to enable encryption\n")
DB_NAME = ".timesheet.db?cipher=aes-256-cfb&kdf_iter=64000"
engine = create_engine('sqlite:///{}'.format(DB_NAME))
DBSession = sessionmaker(bind=engine)
session = DBSession()
Run Code Online (Sandbox Code Playgroud)
编辑:忘记提供更多的信息。
我已经尝试了sqlalchemy列出的内容。在上面的示例中,我意识到我遗漏了一条重要的线,
from pysqlcipher import dbapi 2 as sqlite
Run Code Online (Sandbox Code Playgroud)
我正在尝试在我的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) sqlcipher ×10
android ×7
sqlite ×3
database ×2
dbflow ×1
encryption ×1
integration ×1
ios ×1
iphone ×1
macos ×1
python ×1
python-2.7 ×1
sqlalchemy ×1