标签: sqlcipher

使用SQLCipher将加密数据库附加到未加密的数据库

我正在尝试使用SQLCipher将未加密的sqlite3数据库的内容添加到加密的数据库中.我根据我所试图做掉的这个这个.然而,有些事情我不清楚.

  1. 在行ATTACH DATABASE,加密数据库必须是类型.db?可以.sqlite匹配我的原始数据库吗?

  2. 说加密数据库必须已经存在吗?如果是这样,它应该在应用程序中的哪个位置?我是否必须提供文件路径(文档目录等)?

  3. 我在哪里可以找到成功加密的数据库?它会在哪里得救?

这是我的代码:

+ (void)encryptDB
{
    sqlite3 *unencrypted_DB;
    NSString *path_u = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] 
                  stringByAppendingPathComponent:@"dict.sqlite"];

    if (sqlite3_open([path_u UTF8String], &unencrypted_DB) == SQLITE_OK) {
        NSLog(@"Database Opened");
        // Attach empty encrypted database to unencrypted database
        sqlite3_exec(unencrypted_DB, "ATTACH DATABASE 'dict_encrypted.sqlite' AS encrypted KEY '1234';", NULL, NULL, NULL);

        // Create new tables within encrypted database to match those in unencrypted database
        sqlite3_exec(unencrypted_DB, "CREATE TABLE encrypted.t1(A,B,C);", NULL, NULL, NULL);

        // Copy items …
Run Code Online (Sandbox Code Playgroud)

sqlite iphone encryption sqlcipher

5
推荐指数
2
解决办法
2446
查看次数

使用SQLCipher与android发布的sqlite数据库文件

我在文件中重置了一个数据库assets文件.

如何SQLCipher在android中加密数据库?

java android sqlcipher

5
推荐指数
1
解决办法
5119
查看次数

SQLite是否使用SQLCipher扩展泄漏内存?

我正在使用SQLCipher来存储加密的SQLite数据库。但是,当我sqlite3_key用来加密数据库时,我开始出现内存泄漏。观察以下示例:

#include <sqlite3.h>    

int main()
{
    sqlite3 * connection;
    sqlite3_open_v2(":memory:", &connection, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    sqlite3_key(connection, "passphrase", 10);
    sqlite3_close(connection);
}
Run Code Online (Sandbox Code Playgroud)

此示例产生内存泄漏。如果我取消对的呼叫sqlite3_key,内存泄漏将消失。

我缩小了一些可能的罪魁祸首:

  • 尽管该示例使用内存数据库(因此":memory:"),但在使用基于文件的数据库时,我会看到相同的结果。
  • sqlite3_*调用的所有返回码均为SQLITE_OK,表示没有任何错误。
  • 10for 的缓冲区长度"passphrase"不是问题。

但是,无论我创建了多少连接或使用了多少个不同的加密密钥,内存泄漏始终约为8 KB。这使我怀疑这实际上不是内存泄漏,而只是SQLite / SQLCipher中的某些恒定全局内存,这些内存无法手动释放。

有谁之前经历过这个吗?有办法摆脱泄漏吗?即使这不是官方的内存泄漏,也很难通过此工具检测实际的内存泄漏。

我正在使用WindowsSQLCipher库

c c++ sqlite memory-leaks sqlcipher

5
推荐指数
1
解决办法
715
查看次数

Android使用SQLCipher - 你怎么解密?

我认为这个问题已被提出,但我已经尝试过几个例子无济于事.我的问题是这个...我有一个Android应用程序设置,使用SQLCipher数据库加密,在设备上工作正常.

在模拟器上进行测试时,如果我使用DDMS下载数据库文件,如何读取该文件以检查表和数据?我已经尝试使用SQLite3的命令shell和ATTACH示例,但是每次我这样做时,我只是得到以下消息'错误:文件已加密或不是数据库'.这肯定表明ENCRYPT正在工作,但我如何在模拟器/ eclipse之外正确解密?

我需要一个不同的SQLite客户端吗?其他人都被困在这?

我正在使用:SQLCipher for Android 2.0.8 06/14/2012

有帮助吗?谢谢

sqlite android sqlcipher

5
推荐指数
1
解决办法
3842
查看次数

来自assets文件夹的Android SQLCipher和DB

此刻,我的SQLite数据库文件是加密的,并将其从复制的assets文件夹到应用程序data/data/mypackage/databases文件夹中.

现在我想将SQLCipher库添加到我的项目中并开始使用它们.我可以加密db文件并将其复制到assets应用程序内部并使用相同的密钥吗?是否可以在Windows上加密数据库?我需要做什么?

android sqlcipher

5
推荐指数
1
解决办法
1162
查看次数

如何在android中解密SQLCipher加密文件?

我在android中使用SQLCipher开发了应用程序.这是保护数据库文件到应用程序的安全方法.它适用于加密,但我想解密加密的DB文件,并希望查看SQLite浏览器.

实际上我有很多表及其数据可用.现在,如果我想查看加密的数据库数据,就无法查看它(只有可用于查看数据的日志).但是使用SQLite浏览器我看不到它.

我正在使用"info.guardianproject.database.sqlcipher.SQLiteDatabase"

我已经尝试了很多方法来解密它并查看SQLite浏览器,但它给出了错误"An Error Occured:file is not a sqlite3 database".

任何人都可以帮我解密加密的DB文件.

或者我应该复制加密DB文件并使用"info.guardianproject.database.sqlcipher.SQLiteDatabase"解密它 并使用它来查看所有表.

谢谢,

Mishal Shah

encryption android sqlcipher

5
推荐指数
2
解决办法
9093
查看次数

PBKDF2WithHmacSHA1密钥生成在Android上花费太长时间

我想使用PBKDF2WithHmacSHA1生成密钥,但在android上计算需要很长时间.我在iOS上使用相同数量的迭代与常见的加密,它需要大约6秒,因为在Android上它需要100秒.

这是代码:

public static String generateStorngPasswordHash(String password)
{
    try
    {
        char[] chars = password.toCharArray();
        byte[] salt = getSalt();

        PBEKeySpec spec = new PBEKeySpec(chars, salt, 1010101, 32 * 8);
        SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
        byte[] hash = skf.generateSecret(spec).getEncoded();

        return toHex(salt) + ":" + toHex(hash);
    } catch (Exception e)
    {
        Logger.e("Exception: Error in generating password" + e.toString());
    }
    return "";
}

private static byte[] getSalt() throws NoSuchAlgorithmException
{
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    byte[] salt = new byte[32];
    sr.nextBytes(salt);
    return salt;
}
Run Code Online (Sandbox Code Playgroud)

如果此代码有任何问题,请告诉我?

编辑 …

android cryptography pbkdf2 sqlcipher

5
推荐指数
1
解决办法
4012
查看次数

在Android Studio项目中集成SQLCIPHER

我尝试在我的Android应用程序中集成SQLCipher,使用此链接以及一些堆栈溢出链接(但它们已过时且与官方文档不同).

正确遵循所有步骤,编码部分没有错误.但最后,当我构建项目时,我得到的错误消息是:

错误:(11,0)未找到Gradle DSL方法:'defaultConfig()'可能的原因:

  • 项目'android-database-sqlcipher-master1'可能正在使用不包含该方法的Gradle版本.打开Gradle包装文件
  • 构建文件可能缺少Gradle插件.应用Gradle插件
  • 任何人都可以帮我摆脱这个错误.

    database android sqlcipher android-activity sqlcipher-android

    5
    推荐指数
    1
    解决办法
    4808
    查看次数

    找不到void net.sqlcipher.database.SQLiteDatabase的实现

    在我的项目中尝试使用sqlcipher时,我看到了这个错误.我查了一下,发现有几个人通过添加SQLiteDatabase.loadLibs()来解决它; 但是,它说它期待一个@NotNull Context上下文,我不确定它意味着什么.有人解决了这个问题吗?两个我用的来源.

    我的gradle.build中的依赖项是编译'net.zetetic:android-database-sqlcipher:3.3.1-1@aar',因为我有这个,这意味着我不必手动将任何文件移动到我的libs目录, 对?

    @Override
    public void onCreate(SQLiteDatabase db) {
        SQLiteDatabase.loadLibs();
    
        db.execSQL(CREATE_SCRIPT);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    如果这些是基本问题,请提前道歉.

    android sqlcipher

    5
    推荐指数
    1
    解决办法
    4127
    查看次数

    如何在Flutter中加密SQLite数据库?

    我通过以下代码在Flutter中创建数据库,有什么方法可以加密数据库?

    Flutter是否有可用的库?

    initDb() async {
        io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
        String path = join(documentsDirectory.path, "test.db");
        var theDb = await openDatabase(path, version: 1, onCreate: _onCreate);
        return theDb;
      }
    
    Run Code Online (Sandbox Code Playgroud)

    sqlcipher flutter flutter-dependencies flutter-layout

    5
    推荐指数
    1
    解决办法
    2007
    查看次数