繁体   English   中英

无法使用SQLCipher加密

[英]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上运行。 根据您要执行的操作,有两种选择:

  1. 我们当前向数据库添加加密的指南是使用ATTACH。 简而言之,您可以将加密的数据库附加到标准SQLite数据库,然后在两者之间复制数据。 这是描述方法的帖子: 如何加密纯文本SQLite数据库以使用SQLCipher
  2. 与其在应用程序捆绑包中分发未加密的数据库,不如在使用已知密钥的中包含数据库的加密副本。 然后,在启动时,将数据库复制到位,使用已知的默认密钥打开它,然后使用新的每用户密钥数据运行rekey。 这将重写数据库以根据需要使用新密钥。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM