私のプロジェクトでは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 2番目のコメントはsjlombardoです。 – seelani
そのコードを実行する前にKeyCryptENC.dbが存在していなければなりませんか? KeyCryptENC.dbをアプリケーションのDocumentsディレクトリに保存する必要がありますか? –