SQLCipher を導入方法

SQLCipher を導入方法

iphoneやipadのアプリのDBは、暗号化していないと
ifanbox などや既存のsqleditorで中身が見られてします。
それを予防するためには、SQLCipherを導入することです。
使い方は、簡単で、
keyを設定することにより、dbファイルが暗号化、復号化を
自動的にできます。


1.gitからソースをダウンロード
git clone https://github.com/sqlcipher/sqlcipher.git

2.プロジェクトのsqlcipherを追加する。
導入したいプロジェクトに、
Add Files Projects... で,sqlcipher.xcodeprojを
Copy items if needed のチェックを外し、追加する。

3.Build PhasesにTarget Dependencies を追加する。

TARGETS->Build Phases->Target Dependenciesの箇所に
sqlcipherを追加する。

4.Link Binary With Librariesにlibsqlcipher.aを追加する。

TARGETS->Build Phases->Link Binary With Librariesの箇所に
libsqlcipher.aを追加

5.Other C Flagsの設定する。

Project > Build Settings > Other C Flagsに "-DSQLITE_HAS_CODEC"

SQLCipherの使い方

FMDBの場合には、dbをopen後に以下のメソッドを実行。

db.setKey("暗号・復号に使用するkey")


 関連するFMDBの使い方コマンドのメモ

・FMDBを使用したデータベースのopenとclose例

// /Documentsまでのパスを取得
let paths = NSSearchPathForDirectoriesInDomains(
.DocumentDirectory,
.UserDomainMask, true)
// <Application>/Documents/sample.db というパスを生成
let _path = paths[0].stringByAppendingPathComponent("sample.db")

// FMDatabaseクラスのインスタンスを作成
// 引数にファイルまでのパスを渡す
let db = FMDatabase(path: _path)

// データベースをオープン
db.open()

// データベースをクローズ
db.close()


・テーブルの作成

let db = FMDatabase(path: _path)
let sql = "CREATE TABLE IF NOT EXISTS sample (user_id INTEGER PRIMARY KEY, user_name TEXT);"

// データベースをオープン
db.open()
// SQL文を実行
let ret = db.executeUpdate(sql, withArgumentsInArray: nil)
// データベースをクローズ
db.close()

if ret {
println("テーブルの作成に成功")
}

・INSERT文の実行

let db = FMDatabase(path: _path)
let sql = "INSERT INTO sample (user_id, user_name) VALUES (?, ?);"

db.open()
// ?で記述したパラメータの値を渡す場合
db.executeUpdate(sql, withArgumentsInArray: [1, "sample"])
db.close()

・UPDATE文の実行

let db = FMDatabase(path: _path)
let sql = "UPDATE sample SET user_name = :NAME WHERE user_id = :ID;"

db.open()
// 名前を付けたパラメータに値を渡す場合
db.executeUpdate(sql, withParameterDictionary: ["ID":1, "NAME":"Wonderplanet"])
db.close()

・DELETE文の実行

let db = FMDatabase(path: _path)
let sql = "DELETE FROM sample WHERE user_id = ?;"

db.open()
let ret = db.executeUpdate(sql, withArgumentsInArray: [1])
db.close()

・SELECT文の実行

let db = FMDatabase(path: _path)
let sql = "SELECT user_id, user_name FROM sample ORDER BY user_id;"

db.open()

let results = db.executeQuery(sql, withArgumentsInArray: nil)

while results.next() {
// カラム名を指定して値を取得する方法
let user_id = results.intForColumn("user_id")
// カラムのインデックスを指定して取得する方法
let user_name = results.stringForColumnIndex(1)

println("user_id = \(user_id), user_name = \(user_name)")
}

db.close()

・トランザクションを使った例

let db = FMDatabase(path: _path)
let sql = "INSERT INTO sample (user_id, user_name) VALUES (?, ?);"

var users = [
[2, "Aichi"],
[3, "Gifu"],
[4, "Mie"],
]

db.open()
// トランザクションの開始
db.beginTransaction()

var success = true

for user in users {
// INSERT文を実行
success = db.executeUpdate(sql, withArgumentsInArray: user)

// INSERT文の実行に失敗した場合
if !success {
// ループを抜ける
break
}
}

if success {
// 全てのINSERT文が成功した場合はcommit
db.commit()
} else {
// 1つでも失敗したらrollback
db.rollback()
}

db.close()

管理者オススメのアプリ

簡単に日々のスケジュールを管理できる無料のphoneアプリです。
スケジュール、シフト管理、TODO,お小遣い管理、メモなどいろいろ使用できるアプリ。
メニューの並び替えも自由!


すごい手帳を使ってみる

アクセス数: 無料カウンター




トラックバック(0)

トラックバックURL: http://smartwolf.sakura.ne.jp/Blog/mt-tb.cgi/185

コメントする

ウェブページ

Powered by Movable Type 5.2.7