2009-02-16 57 views
4

我正在开发一个需要在数据库中存储机密的应用程序。用于存储机密的便携式数据库

我需要一个可移植的数据库(如火鸟时,SQLite,等等),其中数据将被存储加密或密码保护或两者...

让我们为例,我想创建一个密码经理。我将需要将该密码存储在数据库中。我习惯于使用Embed Firebird,但不适用于秘密数据。

另一种解决方案是当我没有连接到文件时自然地使用数据库并加密数据库文件,但我不确定安全或性能影响。

你推荐什么最好的方法?

回答

5

有一个项目叫做sqlite-crypt。这应该是你最好的选择。 sqlite数据库加密的磁盘上的所有数据。

3

老实说?使用TrueCryptKeePass

+0

已投票下去? WTF?这是*原始*问题的完美答案。 – CJM 2009-02-18 14:52:31

+0

这不是我。我再次投票支持你,我自己使用Keepass执行另一项任务;-) – 2009-02-21 01:33:13

+0

哈哈 - 谢谢。 我实际上在TrueCrypt卷中使用Keepass。无论如何,我的U3设备在Server 2008上无法正常工作,U3也不是那么安全。 – CJM 2009-02-23 10:31:46

3

我同意CJM,但是如果您在编写自己的程序时遇到了麻烦,那么您应该在写入时加密流并在读取时对其进行解密。任何公布的有点强大的算法都应该保证安全。

3

REALbasic对加密SQLite数据库的内置支持对于我在几个项目中运行良好。

3

我强烈建议您查看SQLCipher(全面披露,我是其中一位开发人员!)这是一个免费的开放源代码的SQLite透明页面级加密实现。这个实现是相当强大的,它处于积极的发展阶段,并且它非常易于使用(相对而言)。

0

我第二个建议使用KeePass。它是敏感数据的绝佳存储,并且提供了一个相当不错的API。下面是如何读取标准Keypass 2数据库的示例:

var dbpath = @"C:\path\to\passwords.kdbx"; 
var masterpw = "[email protected]"; 

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();