내 프로젝트에 대해 내 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;
}
많은 도움을 주신 분들께 감사드립니다.
안녕하세요, 일반 텍스트 sqlite 데이터베이스에서 암호화 된 데이터베이스를 생성하는 방법에 대해 자세히 설명 할 수 있습니까? 나는 단지 당신이 붙어있는 것처럼 –
당신은 그것을 알아 냈다, 늦은 답장을 위해 유감스럽게 일주일의 휴일을 즐기고 있었다. 잘 이건 내 문제를 해결하기 위해 사용하는 링크입니다. https://github.com/sjlombardo/sqlcipher/issues/closed#issue/1 두 번째 설명은 sjlombardo입니다. – seelani
해당 코드를 실행하기 전에 KeyCryptENC.db가 있어야합니까? KeyCryptENC.db를 앱의 Documents 디렉토리에 저장해야합니까? –