Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone sqlite加密/解密+;sqlcipher+;苹果手机_Iphone_Sqlite_Sqlcipher - Fatal编程技术网

Iphone sqlite加密/解密+;sqlcipher+;苹果手机

Iphone sqlite加密/解密+;sqlcipher+;苹果手机,iphone,sqlite,sqlcipher,Iphone,Sqlite,Sqlcipher,我一直在尝试在我的iPhone项目中加密/解密sqlite数据库。我能够通过使用重密钥方法对数据库进行加密。但我无法解密它。 我将sqlite.db文件保存在一个文件夹中。目前正在模拟器上试用 代码段: [[SQLiteDB sharedSQLiteDB] open:<path to the folder> withKey:@""]; [[SQLiteDB sharedSQLiteDB] reKey:@"abc"]; [[SQLiteDB sharedSQLiteDB] clos

我一直在尝试在我的iPhone项目中加密/解密sqlite数据库。我能够通过使用重密钥方法对数据库进行加密。但我无法解密它。 我将sqlite.db文件保存在一个文件夹中。目前正在模拟器上试用

代码段:

[[SQLiteDB sharedSQLiteDB] open:<path to the folder> withKey:@""];

[[SQLiteDB sharedSQLiteDB] reKey:@"abc"];

[[SQLiteDB sharedSQLiteDB] close];

[[SQLiteDB sharedSQLiteDB] open:<path to the folder> withKey:@"abc"];

[[SQLiteDB sharedSQLiteDB] reKey:@""];

- (void)reKey:(NSString *)masterKey
{
    sqlite3_exec(_db, [[NSString stringWithFormat:@"PRAGMA rekey = '%@'", masterKey] UTF8String], NULL, NULL, NULL);

}

我在sqlcipher谷歌群组中读过关于这个主题的帖子,但我无法解密。如有任何帮助,将不胜感激。

请参阅邮件列表:

如果您试图获取一个现有的未加密数据库,对其进行加密,然后将其解密回来,我们建议的方法不是使用rekey,而是使用附加数据库在标准数据库和sqlcipher数据库之间复制数据。这里有更多信息和具体示例:

相反,如果您只是尝试使用sqlcipher对数据进行一般加密(即不从预先存在的数据库进行转换),那么您只需要使用sqlite3_密钥。基本上只需打开数据库,提供密钥,然后进行sql调用。没有单独的加密/解密步骤——所有这些都是由sqlcipher代码动态处理的。在您之前发布的代码中,您根本不会调用rekey。每次打开数据库时,调用PRAGMA key,然后运行快速检查以确保sqlite_master可读

- (void)reKey:(NSString *)masterKey
{
    sqlite3_exec(_db, [[NSString stringWithFormat:@"PRAGMA rekey = '%@'", masterKey] UTF8String], NULL, NULL, NULL);

}