0

我在为我的项目加密我的 SQLITE 数据库时遇到了很多问题,最后我尝试使用附加数据库方法来加密我未加密的数据库。

我试过在终端上运行 attach 命令,结果却发现输出是一个未加密的数据库。所以我应该在我的项目中运行命令,导入我的 sqlcipher 和 ssl 库,对吗?

所以我试了一下,该方法运行没有任何故障,但我什至没有在文档目录中创建加密数据库。我究竟做错了什么?[下面的代码片段]

 - (void)encryptDB
{
  NSLog (@"Start");
  sqlite3 *DB = [iPad_3AppDelegate getNewDBConnection];

  sqlite3_exec(DB, "ATTACH DATABASE KeyCryptENC.db AS encrypted KEY 1234;", NULL, NULL, NULL);

  sqlite3_exec(DB, "CREATE TABLE encrypted.Account(A_id,C_ID,Account_Name,Username,Password,Other_Information);", NULL, NULL, NULL);
  sqlite3_exec(DB, "CREATE TABLE encrypted.Categories(C_ID,Category);", NULL, NULL, NULL);
  sqlite3_exec(DB, "CREATE TABLE encrypted.UserInfo(Password,Hint,Secret_Question,Secret_Answer);", NULL, NULL, NULL);

  sqlite3_exec(DB, "INSERT INTO encrypted.Account SELECT * FROM Account;", NULL, NULL, NULL);
  sqlite3_exec(DB, "INSERT INTO encrypted.Categories SELECT * FROM Categories;", NULL, NULL, NULL);
  sqlite3_exec(DB, "INSERT INTO encrypted.UserInfo SELECT * FROM UserInfo;", NULL, NULL, NULL);

  sqlite3_exec(DB, "DETACH DATABASE encrypted;", NULL, NULL, NULL);

  NSLog (@"End");

}

+ (sqlite3 *)getNewDBConnection{
  sqlite3 *newDBconnection;
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *path = [documentsDirectory stringByAppendingPathComponent:@"KeyCrypt.sqlite"];
  // Open the database. The database was prepared outside the application.
  if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) {
    NSLog(@"Database Successfully Opened :)");
  } else {
    NSLog(@"Error in opening database :(");
  } 
  return newDBconnection; 
} 

非常感谢你们的帮助!

4

1 回答 1

1

经过更深入的研究,我意识到加密的问题,我。我使用的是 Mac OS X 原生 sqlite3。是的,这个链接应该可以帮助任何面临与我类似的问题的人。

BWAHAHA,我觉得很傻,没有早点想到这个。

于 2010-12-09T07:35:07.207 回答