首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取不适用于iOS 10的加密DB

读取不适用于iOS 10的加密DB
EN

Stack Overflow用户
提问于 2016-10-26 13:17:39
回答 1查看 556关注 0票数 0

我正在开发一个iOS应用程序。Encryption & Decryption读和写一直工作到iOS 9。但是在升级到iOS 10之后,它开始给出以下消息的问题:“文件是加密的,或者不是数据库”。

对于DB encryption,我使用以下代码:

代码语言:javascript
复制
sqlite3 *db1;
if (sqlite3_open([[self.databaseURL path] UTF8String], &db1) == SQLITE_OK) {
const char* key = [@"strong" UTF8String];
sqlite3_key(db1, key, (int)strlen(key));

   if (sqlite3_exec(db1, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
      NSLog(@"Password is correct, or a new database has been initialized");
   } else {
      NSLog(@"Incorrect password!");
   }
  sqlite3_close(db1);
}

&它运行得非常好。

对于打开和读取操作,我使用以下代码:

代码语言:javascript
复制
-(void)openDB
{
    NSString *docsDir;
    docsDir = [self getDirectoryPath];
    aPath = [docsDir stringByAppendingPathComponent: @"SQLITE_DEMO.sqlite"];
    dbpath = [aPath UTF8String];
}

阅读:

代码语言:javascript
复制
if (sqlite3_open(dbpath, &contactDBNew) == SQLITE_OK)
        {
            NSString querySQL = [NSString stringWithFormat:@"SELECT  FROM USER"];

            const char *query_stmt = [querySQL UTF8String];
            char *err;

            int check = sqlite3_exec(contactDBNew, query_stmt, NULL, NULL, &err);

            if (sqlite3_prepare_v2(contactDBNew, query_stmt, -1, &statement, NULL) == SQLITE_OK)
            { 
                 // Successfully executed.
         } else {
              // Error in execution.
        }
  }

在这里,它在读取准备语句时失败,错误消息如下:“文件是加密的,或者不是数据库”。

请告诉我我错过了什么!!

EN

回答 1

Stack Overflow用户

发布于 2016-12-05 19:42:53

您需要在每次打开数据库后运行PRAGMA key=或使用sqlite3_key。实际上,最好在应用程序开始时打开数据库一次,然后在结束时关闭它。由于密钥派生,重复打开和关闭数据库是非常昂贵的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40263384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档