2010-12-06 15 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 2番目のコメントはsjlombardoです。 – seelani

+0

そのコードを実行する前にKeyCryptENC.dbが存在していなければなりませんか? KeyCryptENC.dbをアプリケーションのDocumentsディレクトリに保存する必要がありますか? –

答えて

1

もっと集中的な研究の後、私は暗号化の問題を認識しました。私はMac OS Xネイティブsqlite3を使用していました。そして、ええ、このlinkは私のような問題に直面している人を助けるべきです。

BWAHAHA、私はこれを早期に考えていないのでとても馬鹿だと感じます。

+0

こんにちはseelani、あなたはsqlciperのためにSQLiteを使用する場所から教えてくれますか?私は同じ問題を抱えています。 –

+0

sqlcipherのソース・ディレクトリーからsqliteを使用する必要があります。問題の#1の2番目のコメントには、sjlombardoの詳細な説明があります。https://github.com/sjlombardo/sqlcipher/issues/1 –

+0

sqlcipherをGitHubの独自の組織に移したので、問題へのリンクはかわった。私はこれがあなたがリンクしていたコメントであると思う:https://github.com/sqlcipher/sqlcipher/issues/1#issuecomment-24738 –

関連する問題