4

データベースにシークレットを保存する必要があるアプリケーションを開発しています。

データが暗号化またはパスワード保護、またはその両方で保存されるポータブル データベース (Firebird、Sqlite など) が必要です。

パスワード マネージャーを作成するを考えてみましょう。そのパスワードをデータベースに保存する必要があります。Embed Firebird の使用には慣れていますが、秘密のデータには慣れていません。

もう 1 つの解決策は、データベースを自然に使用し、ファイルに接続していないときにデータベース ファイルを暗号化することですが、セキュリティやパフォーマンスへの影響はよくわかりません。

あなたが推奨する最良の方法は何ですか?

4

7 に答える 7

6

また、SQLite や Access、Firebird などと同様に、DLL のみを必要とし、データを 1 つのファイルに格納する SQL Server Compact エディションを確認することもできます。

また、暗号化機能も組み込まれています。

参考文献:

パスワード暗号化

あなたの他の質問 os SOに対する私の答えを見てください。

于 2009-02-17T02:54:08.337 に答える
5

sqlite-cryptというプロジェクトがあります。これが最善の策です。ディスク上のすべてのデータが暗号化された sqlite db。

于 2009-02-17T00:00:54.993 に答える
3

暗号化された SQLite データベースを操作するための REALbasic のビルトイン サポートは、いくつかのプロジェクトでうまく機能しました。

于 2009-02-17T00:36:58.183 に答える
3

私は CJM に同意しますが、独自のストリームを作成することに固執している場合は、ストリームを書き込み時に暗号化し、読み取り時に復号化する必要があります。ある程度強力な公開されたアルゴリズムは、物事を安全に保つ必要があります。

于 2009-02-17T00:01:13.463 に答える
3

SQLCipherを確認することを強くお勧めします(完全開示、私は開発者の 1 人です!) これは、SQLite の透過的なページレベル暗号化の無料のオープンソース実装です。実装はかなり堅牢で、活発な開発が行われており、(比較的言えば) 非常に使いやすいです。

于 2009-06-29T14:26:09.530 に答える
3

本音をいうと?TrueCryptまたはKeePassを使用します。

于 2009-02-16T23:55:55.770 に答える
0

私は KeePass を使用することを提案します。これは機密データの優れた保管場所であり、非常に優れた API を公開しています。標準の Keypass 2 データベースを読み取る方法の例を次に示します。

var dbpath = @"C:\path\to\passwords.kdbx";
var masterpw = "Your$uper$tr0ngMst3rP@ssw0rd";

var ioConnInfo = new IOConnectionInfo { Path = dbpath };
var compKey = new CompositeKey();
compKey.AddUserKey(new KcpPassword(masterpw));

var db = new KeePassLib.PwDatabase();
db.Open(ioConnInfo, compKey, null);

var kpdata = from entry in db.RootGroup.GetEntries(true)
                select new
                {
                    Group = entry.ParentGroup.Name,
                    Title = entry.Strings.ReadSafe("Title"),
                    Username = entry.Strings.ReadSafe("UserName"),
                    Password = entry.Strings.ReadSafe("Password"),
                    URL = entry.Strings.ReadSafe("URL"),
                    Notes = entry.Strings.ReadSafe("Notes")

                };                                      
db.Close();
于 2012-01-27T03:02:51.317 に答える