FC2ブログ

[iPhone]sqlcipherを利用する。(その2)

http://otuji.blog97.fc2.com/blog-entry-213.html
以前の記事に誤りがあったため修正の意味を含めて新たな記事で
メモを残します。

iPhoneの内部DBを暗号化するためにsqlcipherというツールがある。
どうも日本語のよいチュートリアルが見つからなかったのでこれを利用するための手順をメモしておく。

【環境】
Mac OS X 10.7.5

【前提】
1.Xcodeがインストールされている事。
※4.2で確認
2.「.tar.gz」、「.zip」が解凍できる事。

【手順】
1.作業用の適当なフォルダを作成する。

~/Documents/xcode_workspace/sqlcipher/

2.下記URLから「openssl-1.0.1c.tar.gz」を作業用フォルダにダウンロードする。
ftp://ftp.openssl.org/source/

3.下記URLから「sqlcipher-openssl-xcode-d265b64.zip」を作業用フォルダにダウンロードする。
[雲のマークZIP]をクリックでダウンロードできる。
https://github.com/sqlcipher/openssl-xcode

4.下記URLから「sqlcipher-sqlcipher-v2.0.6-0-g6dbdd46.zip」を作業用フォルダにダウンロードする。
[雲のマークZIP]をクリックでダウンロードできる。
https://github.com/sqlcipher/sqlcipher

5.上記、2.3.4.でダウンロードしたものを解凍する。
※The Unarchiverなんかがあると便利。

6.「openssl-1.0.1c」の中身を「sqlcipher-openssl-xcode-d265b64」にコピーする。

7.「OPENSSL_SRC」のパスを指定する。
上部メニューのXcode=>Preferenceのメニューを開き
開いたウインドウのLocationsのSoure Treesを開く。
そこで下記の通り設定を追加する。
Display Name:OPENSSL_SRC
Setting Name:OPENSSL_SRC
Path:「openssl-1.0.1c」の絶対パス

8.sqlcipherを利用するプロジェクトを作成する。
今回は新規にsqlcipherTestプロジェクトを、
Single View Applicaitonで作成する。
場所は1.で作成したフォルダ内。

9.「sqlcipherTest」プロジェクトを開き、プロジェクトに、
 opensslプロジェクト、sqlcipherプロジェクトを追加する。

10.「openssl」プロジェクトのBase SDKをLatest iOSを選択する。

11.「sqlcipher」プロジェクトのBase SDKをLatest iOSを選択する。

12.ビルドの依存関係を設定する。
 sqlcipherTestのTARGETSのsqlcipherTestから、
 Build Phasesを選択し、Target Dependenciesに
 「sqlcipher」、「crypto」を追加する。

13.Link Binary With Librariesに設定を行う。
 「libcrypto.a」「libsqlcipher.a」を追加する。
 「libsqlite3.dylib」が含まれている場合は取り除く。

14.build architecturesを必要に応じて変更する。

15.マクロを追加する。
 「Other C Flags」のdebugとreleaseに「-DSQLITEHASCODEC」
 を追加する。

16.下記コードを「ViewController.m」の「viewDidLoad」に追加する。

#import

...
NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
stringByAppendingPathComponent: @"sqlcipher.db"];
sqlite3 *db;
if (sqlite3_open([databasePath UTF8String], &db) == SQLITE_OK) {
const char* key = [@"BIGSecret" UTF8String];
sqlite3_key(db, key, strlen(key));
if (sqlite3_exec(db, (const char*) "CREATE TABLE testtable(id number(009, 0) primary key,item number(009, 0) );", NULL, NULL, NULL) == SQLITE_OK) {
// password is correct, or, database has been initialized
NSLog(@"SQLITE_OK");

} else {
// incorrect password!
NSLog(@"SQLITE_NG");
}
if (sqlite3_exec(db, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
// password is correct, or, database has been initialized
NSLog(@"SQLITE_OK");

} else {
// incorrect password!
NSLog(@"SQLITE_NG");
}

sqlite3_close(db);
}

17.iPhone Simulatorを選択して実行する。

18.作成された.dbファイルを確認する。
 下記のフォルダにcdで移動する。
/Users/sjlombardo/Library/Application Support/iPhone Simulator/5.0/Applications//Documents

下記コマンドで内容が暗号化されているか確認する。
% hexdump -C sqlcipher.db

【参考URL】
http://sqlcipher.net/ios-tutorial
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

これ実装したいです。。

とても参考にさせていただいております。Xcode4.5で挑戦中です。

6で「openssl-1.0.1c」の中身を「sqlcipher-openssl-xcode-d265b64」にコピーされて
おりますが、openssl-1.0.1cの細かい中身をすべて、sqlcipher-openssl-xcode-d265b64の
直下にまるまるコピーしてよいのでしょうか?

そのうえで7番の作業で指定しているパスは
6でコピーしているのでsqlcipher-openssl-xcode-d265b64を
指定するのでしょうか?

※そもそも(その1)編で実行されているようにビルドの作業は
それぞれのプロジェクトでビルドしないといけないのでしょうか?
「libcrypto.a」「libsqlcipher.a」がそもそも私のXcode環境では赤く表示されております。

すいません。アドバイスいただけると助かります。
よろしくお願いいたします。
プロフィール

乙寺

Author:乙寺
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード