我正在尝试使用SQLCipher将未加密的sqlite3数据库的内容添加到加密的数据库中.我根据我所试图做掉的这个和这个.然而,有些事情我不清楚.
在行ATTACH DATABASE,加密数据库必须是类型.db?可以.sqlite匹配我的原始数据库吗?
说加密数据库必须已经存在吗?如果是这样,它应该在应用程序中的哪个位置?我是否必须提供文件路径(文档目录等)?
我在哪里可以找到成功加密的数据库?它会在哪里得救?
这是我的代码:
+ (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) 我在文件中重置了一个数据库assets文件.
如何SQLCipher在android中加密数据库?
我正在使用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中的某些恒定全局内存,这些内存无法手动释放。
有谁之前经历过这个吗?有办法摆脱泄漏吗?即使这不是官方的内存泄漏,也很难通过此工具检测实际的内存泄漏。
我正在使用Windows的SQLCipher库。
我认为这个问题已被提出,但我已经尝试过几个例子无济于事.我的问题是这个...我有一个Android应用程序设置,使用SQLCipher数据库加密,在设备上工作正常.
在模拟器上进行测试时,如果我使用DDMS下载数据库文件,如何读取该文件以检查表和数据?我已经尝试使用SQLite3的命令shell和ATTACH示例,但是每次我这样做时,我只是得到以下消息'错误:文件已加密或不是数据库'.这肯定表明ENCRYPT正在工作,但我如何在模拟器/ eclipse之外正确解密?
我需要一个不同的SQLite客户端吗?其他人都被困在这?
我正在使用:SQLCipher for Android 2.0.8 06/14/2012
有帮助吗?谢谢
此刻,我的SQLite数据库文件是不加密的,并将其从复制的assets文件夹到应用程序data/data/mypackage/databases文件夹中.
现在我想将SQLCipher库添加到我的项目中并开始使用它们.我可以加密db文件并将其复制到assets应用程序内部并使用相同的密钥吗?是否可以在Windows上加密数据库?我需要做什么?
我在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
我想使用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应用程序中集成SQLCipher,使用此链接以及一些堆栈溢出链接(但它们已过时且与官方文档不同).
正确遵循所有步骤,编码部分没有错误.但最后,当我构建项目时,我得到的错误消息是:
错误:(11,0)未找到Gradle DSL方法:'defaultConfig()'可能的原因:
任何人都可以帮我摆脱这个错误.
database android sqlcipher android-activity sqlcipher-android
在我的项目中尝试使用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)
如果这些是基本问题,请提前道歉.
我通过以下代码在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 ×10
android ×7
sqlite ×3
encryption ×2
c ×1
c++ ×1
cryptography ×1
database ×1
flutter ×1
iphone ×1
java ×1
memory-leaks ×1
pbkdf2 ×1