web-dev-qa-db-ja.com

C#でSQLiteデータベースを暗号化する

.Net/C#でSQLiteデータベースファイルを暗号化するための最良のアプローチは何ですか?私は sqlite-dotnet2 ラッパーを使用しています。

SQLite Encryption ExtensionSQLite Crypt のようなツールがありますが、私のプロジェクトがGPLの下にある間は、どちらも無料ではありません。

私が使用しようと思った素朴なアプローチは、SQLiteに一時ファイルを処理させ、プログラムの終了時に暗号化して、元のファイルを上書き(ゼロアウト)することでした。明らかな欠点は、プログラムがクラッシュした場合(および実行中に)、プレーンテキストのDBにアクセスできることです。

これにアプローチするより良い方法はありますか? (SQLiteConnection.CreateFileを使用する代わりに)暗号化されたストリームをラッパーに渡すことはできますか?

[編集]多分私はこれを考えすぎています。接続文字列でパスワードオプションを使用するだけで十分ですか?その場合、ファイルは適切に暗号化されますか(または保護が弱くなりますか)?

19
dbkk

暗号化を含むSystem.Data.Sqliteラッパーを使用することをお勧めします。それはうまく機能し、使いやすく、完全なADO.Net実装です。ラッパーは https://system.data.sqlite.org から入手でき、開発者はこのフォーラムで暗号化の使用方法を次のように説明しています: https://web.archive .org/web/20100207030625/http://sqlite.phxsoftware.com/forums/t/130.aspx 。ヒント-パスワードプロパティを設定するだけです。彼はまた、フォーラムの他の場所でMicrosoft CryptoAPIを使用して暗号化を行う方法についても説明しています。

23
Ed Power

を見てみましょう:

http://zetetic.net/software/sqlcipher

オープンソースです。

Wxsqlite3のコードをチェックすることもできます。

7
Krog

私は試してみます http://code.google.com/p/csharp-sqlite/ 、それはMITライセンスの下でC#でSQLite3.6.16を書き直したものです。微調整するのは簡単だと思います。

EDIT:以下の注で説明されているように、sqlcipher暗号化もサポートしています

UPDATE:Google Codeが読み取られたため、プロジェクトは独自のWebサイトに移動しました https://system.data.sqlite.org/ index.html/doc/trunk/www/index.wiki

5
Yakeen