[英]Unable to encrypt using SQLCipher
我目前正在为iPhone开发一个简单的帐户管理应用程序。 我正在使用sqlcipher加密和解密数据库。
目前,我在应用程序捆绑包中有一个未加密的数据库,我想将其复制到iPhone文档目录,然后对其进行加密,或者在将其复制到文档目录之前对其进行加密。
我面临的问题是,无论我做什么,我似乎都得到了一个未加密的数据库,无论我尝试使用哪种加密方法,无论是“ ATTACH”数据库方法还是“ key()/ rekey” ()“ 方法。
我尝试在终端中使用“ ATTACH”数据库方法,但结果是未加密的数据库。 我尝试以编程方式使用“ key()/ rekey()”方法,如下所示:
sqlite3 *db;
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"KeyCrypt.sqlite"];
if (sqlite3_open([defaultDBPath UTF8String],&db)==SQLITE_OK) {
NSLog (@"Running keying.");
sqlite3_key(db, "1234", 4);
if (sqlite3_exec(db, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
// password is correct, or, database has been initialized
NSLog (@"This has occured correctly?");
}
else
{
// incorrect password!
NSLog (@"This has occured incorrectly?");
}
}
我在某处做错了吗? 我已经尝试了整整一天的在线研究,并且无法找到一种解决方案,说明为什么在运行时之前或期间未对我的数据库进行加密:(
如果您需要任何其他信息,我愿意为您提供,请帮助学生!
编辑:
用来密钥我的数据库的方法的摘录。
//Initializing the sqlite3_key function.
int sqlite3_key(sqlite3 *db, const void *pKey, int nKey);
sqlite3_key(db, "1234", 4);
显然我没有初始化sqlite3_key -_-“。同样,即使文件已加密,检查仍然显示发生了错误,并且数据库未成功打开。
关于数据库的打开,我打开数据库的每个实例都必须运行sqlite3_key吧? 在那个实例中,我可以正常访问数据库吗?
感谢您的所有帮助。
由于更改页面大小和每页初始化向量所需的保留字节涉及多个复杂性,因此SQLCipher不再支持使用重新生成密钥将未加密的数据库转换为加密的数据库。 因此,您提供的代码将无法在任何最新版本的SQLCipher上运行。 根据您要执行的操作,有两种选择:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.