2010-12-06 104 views
0

我有很多问题让我的SQLITE数据库为我的项目加密,最后我试图使用附加数据库方法来加密我的未加密数据库。附加数据库SQLCIPHER

我试过在终端上运行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; 
} 

非常感谢帮助家伙!

+0

嗨seelani, 你能详细解释一下,你是如何设法从纯文本sqlite数据库创建加密数据库的?我只是因为你被卡住了 – 2011-01-10 18:54:01

+1

你有没有想过它,对于迟到的回复是享受假期一个星期的遗憾。以及这是我用来解决我的问题的链接,https://github.com/sjlombardo/sqlcipher/issues/closed#issue/1 请看sjlombardo的第二条评论。 – seelani 2011-01-18 06:14:28

回答

1

经过更深入的研究,我意识到加密问题,ME。我使用的是Mac OS X本地sqlite3。而且这个link应该可以帮助任何遇到类似于我的问题的人。

BWAHAHA,我觉得这么早就没想到这么傻。