如何在C#和Sqlite安全中隐藏数据库密码

如何在C#和Sqlite安全中隐藏数据库密码,c#,database,security,sqlite,passwords,C#,Database,Security,Sqlite,Passwords,我刚刚开始使用C#和SQlite数据库(包含敏感信息)开发一个桌面应用程序,它将安装在本地任何PC上。我想将数据库密码和sql命令存储在安全的地方。关于这一点,我有一些疑问: 您认为SQlite数据库有多安全?我读过 通过添加加密,整个文件被加密,甚至 标题。你认为它有多安全 要存储密码,有很多选择(有些可能是我想到的简单建议): a) 将密码和SQL命令存储在dll文件中并对其进行模糊处理。但是以前有没有人尝试过破解它或者使用Olly Debugger搜索它呢? b) 在app.config文

我刚刚开始使用C#和SQlite数据库(包含敏感信息)开发一个桌面应用程序,它将安装在本地任何PC上。我想将数据库密码和sql命令存储在安全的地方。关于这一点,我有一些疑问:

  • 您认为SQlite数据库有多安全?我读过 通过添加加密,整个文件被加密,甚至 标题。你认为它有多安全
  • 要存储密码,有很多选择(有些可能是我想到的简单建议): a) 将密码和SQL命令存储在dll文件中并对其进行模糊处理。但是以前有没有人尝试过破解它或者使用Olly Debugger搜索它呢? b) 在app.config文件中加密,自定义加密。但我读过几篇文章,加密连接字符串似乎很容易破解。。。 c) 将密码放在XML文件中并加密,或者可能在序列化文件中加密(但加密也将存储在源代码中,并且可以折射)
  • 如果应用程序已被混淆且数据库已加密。您认为会有任何性能问题吗

  • 谢谢。

    你需要问问自己,你到底想保护什么,为了什么。在纯客户端安装的应用程序(尤其是托管应用程序)中可以执行的任何操作都很容易被破解。加密狗更能防裂,但如果回报足够大,它不会阻止一个有经验的破解者,而且它们既昂贵又让用户和分销商感到痛苦。保护应用程序的唯一可靠方法是在自己的服务器上运行应用程序的敏感部分。在您的情况下,数据库可以驻留在您的服务器上,然后您可以给出单独的密码、检查IP地址、限制查询速率以阻止刮取等


    OTOH如果您的唯一目的是保护您的数据库不受缺乏技术知识的人的偶然兴趣的影响,那么任何数据库加密方案和任何比配置文件中的纯文本更复杂的密码存储方案都可以正常工作。

    bare SQLite不会加密数据库,但是您可能需要研究一些扩展:,当然,我不是在使用裸sqlite,而是在使用sqlite Expert Professional或sqlite.org提供的dll对其进行加密。我试着在文本编辑器中打开文件,它似乎是加密的。你如何判断它是加密的?我想很多时候,用肉眼很难分辨。加密扩展可以在OFB模式下执行AES-256,这可能相当不错。我认为see only ships as source,因此如果您获得dll,很可能它不是内置的……在#2上,一种常见的做法是根本不存储密码。相反,存储散列版本(使用crypt或md5等单向函数进行散列)。要验证,请对用户输入的内容进行散列并比较散列。这样,如果有人设法获得数据库副本并破解了初始加密,那么此人仍然无法恢复个人密码。但这是否足以成为一个问题取决于您的应用程序和平台。您如何看待模糊处理?它也容易被破解吗?这样的混淆不能被破解(即原始标识符无法恢复),但没有必要。对CLR程序集和p/invokes的引用不能混淆,字符串/资源加密方案几乎毫无用处。这些为破解者提供了足够的信息来查找密码和/或从模糊程序中删除保护。