我当时并不需要本地化数据文件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?
我想用SQLCipher创建一个新的加密数据库,由于以下链接,我并没有真正找不到如何设置密钥:http://sqlcipher.net/sqlcipher-api/#key
正如文档所解释的那样,我必须使用PRAGMA设置密钥,但是从哪里开始执行该命令?
我有一个带有“sqlcipher 库”的加密数据库,但现在我不知道我可以在应用程序内以正确的方式在哪里存储数据库密码。我认为在 PRIVATE_MODE 中的 SharedPreferences 是一个存储它的好地方;但我不确定。有什么建议吗?谢谢。
database android password-protection sharedpreferences sqlcipher
我正在使用旧版本的sqlcipher和open ssl应用程序。现在我为了Xcode 5和iOS 7兼容性而迁移到新版本,但它没有解密旧版本的数据库。
请帮帮我。我在谷歌上搜索,发现cipher_migrate必须使用类似的东西,但不知道如何使用它。
SQLCipher 是否存在 JDBC 驱动程序?我想用 javaSE 和加密的 SQLite 编写程序。我在网上搜索了一下,没有发现太多关于SQLCipher JDBC的信息。
或者除了使用 SQLCipher 之外还有其他关于加密 SQLite 的免费解决方案吗?我正在使用JavaSE。
对我之前问题的附件参考:-内存不足
我会尽量准确。我从我的网络服务调用一个长 base64 字符串得到响应。我解码字符串并得到一个包含我的数据的巨大字符串。我反序列化字符串并使用如下字符串创建我的类的对象。
String decryptedXml = XmlObject.toDecryptedXmlString(gameDetail.getGameData(), app.getSessionEncryptionKey());
Game noviceGame = deserialiseGame(decryptedXml, NoviceGamer.class);
Run Code Online (Sandbox Code Playgroud)
desrialiseGame() 只是一种反序列化数据并创建并返回我的游戏实例的方法。为了将这个对象维护到多个会话(登录/注销),我将整个游戏数据(我的反序列化给了我游戏实例的字符串)存储在数据库中。
下次当用户登录时,为了创建游戏实例,我从我的数据库中获取字符串并再次尝试反序列化,以便我取回我的游戏实例。但是当我尝试从我的数据库中获取字符串时,我在获取字符串时遇到“内存不足”异常。
调用反序列化游戏的方法如下。
private HashMap<String, Game> games = new HashMap<String, Game>();
public void load(LocalDatabaseHelper localDbHelper) throws Exception
{
synchronized(gameLockObject) {
GameDetailDAO dao = new GameDetailDAO(localDbHelper);
//this will fetch me the all the entities from databse
ArrayList<GameDetailEntity> dbGameDetails = dao.getEntities(null, null);
for (GameDetailEntity gameDetail : dbGameDetails) {
String gameLevel = gameDetail.getDetailLevel();
String gameXml = gameDetail.getGameData();
Game game = null;
if(gameLevel.equalsIgnoreCase("Novice")) {
game = Job.deserialiseJob(gameXml, NoviceLevel.class); …Run Code Online (Sandbox Code Playgroud) 我使用 SQLCipher 在我的应用程序中加密 sqlite 数据库。一切正常,但我的应用程序在获取数据库期间运行缓慢。我将PRAGMA kdf_iter更改为 4000,但它仍然很慢。加密之前我没有任何问题。
-(NSError *) openDatabase {
NSError *error = nil;
NSString *databasePath = [self getDatabasePath];
const char *dbpath = [databasePath UTF8String];
int result = sqlite3_open_v2 (dbpath, &db , SQLITE_OPEN_READWRITE , NULL);
if (result == SQLITE_OK) {
sqlite3_exec(db, [@"PRAGMA kdf_iter = '4000';" UTF8String], NULL, NULL, NULL);
sqlite3_exec(db, [@"PRAGMA key = 'password'" UTF8String], NULL, NULL, NULL);
NSLog(@"Password is correct , Database is Activated");
sqlite3_exec(db, [@"PRAGMA cipher = 'aes-256-cfb';" UTF8String], NULL, NULL, NULL);
}
else { …Run Code Online (Sandbox Code Playgroud) 我曾与 DBFlow 一起工作,它在数据库方面很简单,但我想问一下是否有一个很好的例子可以将 SQLCipher 与 DBFlow 一起使用
我已遵循此链接寻求帮助
但是如果有人能提供一些简单的例子,将会非常有助于通过简单的步骤创建安全的数据库应用程序。
错误这一行:
mDataBase = SQLiteDatabase.openDatabase(dbPath, "123", null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
Run Code Online (Sandbox Code Playgroud)
打开数据库时。但怎么了?如何用密码打开数据库?谁能帮我?
error : net.sqlcipher.database.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master任何人都可以帮我解决它吗?提前致谢
import android.content.Context;
import android.database.SQLException;
//import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;
import net.sqlcipher.database.SQLiteDatabase.CursorFactory;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.File;
import net.sqlcipher.database.SQLiteDatabase;
import android.app.Activity;
import android.os.Bundle;
public class DatabaseHelper extends SQLiteOpenHelper {
private static String TAG = DatabaseHelper.class.getName(); …Run Code Online (Sandbox Code Playgroud) 我有一个电子应用程序,它将数据保存在存储在我的机器中的 SQLite 数据库中。我已经完成了 CRUD 操作的所有设置,并且应用程序运行良好。现在我需要加密 SQLite DB 文件。我在网上搜索解决方案,但所有解决方案都是针对预加密的数据库,该数据库正在电子内部解密。
要求是,用户将提供应用程序用于加密数据库文件的密码,并且用户将提供用于解密和执行 CRUD 操作的密码
知道如何实现这一目标吗?
PS:我检查过 SQLCipher 文档,但没有找到我需要的东西。到目前为止,我正在使用sqlite3节点模块来执行 CRUD
编辑1:我尝试使用sqlite-cipher模块,并且能够在单独的 js 文件中加密数据库。但是当我将其与电子 ipcMain 集成时,应用程序由于高 RAM 消耗而关闭。有什么建议么???