2010-12-06 2 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

안녕하세요, 일반 텍스트 sqlite 데이터베이스에서 암호화 된 데이터베이스를 생성하는 방법에 대해 자세히 설명 할 수 있습니까? 나는 단지 당신이 붙어있는 것처럼 –

+1

당신은 그것을 알아 냈다, 늦은 답장을 위해 유감스럽게 일주일의 휴일을 즐기고 있었다. 잘 이건 내 문제를 해결하기 위해 사용하는 링크입니다. https://github.com/sjlombardo/sqlcipher/issues/closed#issue/1 두 번째 설명은 sjlombardo입니다. – seelani

+0

해당 코드를 실행하기 전에 KeyCryptENC.db가 있어야합니까? KeyCryptENC.db를 앱의 Documents 디렉토리에 저장해야합니까? –

답변

1

더 집중적 인 연구를 한 후 암호화 문제를 깨달았습니다. Mac OS X 기본 sqlite3을 사용하고있었습니다. 그리고이 link은 광산과 비슷한 문제에 직면 한 사람을 도울 것입니다.

BWAHAHA, 나는 이것을 더 일찍 생각하지 않으면 매우 어리 석다.

+0

안녕하세요 seelani, 어디에서 sqlite를 사용할 sqlite 말해 줄 수 있습니까? 나는 같은 문제가있는 알로스이다. –

+0

sqlcipher의 소스 디렉토리에서 sqlite를 사용해야합니다. sjlombardo가 문제 # 1의 두 번째 설명에서 찾을 수 있습니다. https://github.com/sjlombardo/sqlcipher/issues/1 –

+0

sqlcipher를 GitHub의 자체 조직으로 이전 했으므로 문제 링크가 변경되었습니다. 저는 여러분이 여러분과 연결하고있는 코멘트라고 생각합니다 : https://github.com/sqlcipher/sqlcipher/issues/1#issuecomment-24738 –