我可以密码加密 SQLite 数据库吗?

Posted

技术标签:

【中文标题】我可以密码加密 SQLite 数据库吗?【英文标题】:Can i password encrypt SQLite database? 【发布时间】:2012-08-24 19:33:55 【问题描述】:

我正在使用带有 C# Windows 应用程序的 SQLite 数据库版本 3.. 我想使用密码或任何其他加密方式加密 SQLite 数据库文件,以防止客户端从程序文件夹中打开它。

我不想要任何运行时加密方式,我只想让数据库文件在客户端尝试从程序文件中打开它时显示密码字段..谢谢

编辑

如果我是用代码加密的话,客户端可以在安装完成后打开,db文件转移到程序文件中再打开程序进行加密不是吗?

【问题讨论】:

可能重复:***.com/questions/1381264/… 我认为 Hassan 正在寻找非运行时加密。 【参考方案1】:

我使用 SQLite 版本 3 完美运行! 你必须这样做:

//if the database has already password
try
            string conn = @"Data Source=database.s3db;Password=Mypass;";
            SQLiteConnection connection= new SQLiteConnection(conn);
            connection.Open();
            //Some code
            connection.ChangePassword("Mypass");
            connection.Close();
    
//if it is the first time sets the password in the database
catch
    
            string conn = @"Data Source=database.s3db;";
            SQLiteConnection connection= new SQLiteConnection(conn);
            connection.Open();
            //Some code
            connection.ChangePassword("Mypass");
            connection.Close();
    

此后如果用户尝试打开数据库。会说受管理员保护或数据库已加密或不是数据库或损坏的文件!

【讨论】:

如果我在某些 sqlite 数据库上应用此代码并且它被加密,如果我想手动编辑数据库中的某些表怎么办,我的意思是有什么办法可以将它解密回来?我需要为此编写什么代码? 我认为没有其他方法只是编码。您可以做的是使用此代码创建一个独立的应用程序,将密码设为空并要求旧密码访问它 我使用了这个 con.Open();con.ChangePassword("Mypass"); con.Close();现在它已加密现在我想手动更改它并想打开它我该怎么办? 我将密码设置为SQLiteConnection.CreateFile()时间 这对我有用。谢谢。但缺点是,如果您知道密码仍然无法打开数据库文件。有什么方法可以查看受保护的数据库文件吗?【参考方案2】:

在这个forum 中发现一个帖子表明..

Standard SQLite3 API doesn't offer any form of protection and relies only on underlying OS privileges mecanism (if any) for "security". If you have an existing SQLite-style database which uses a specific API to gain access, then you should use this particular (non-standard) API.

如果您可以/想要为 SQLite 使用某种扩展,您也可以尝试 SQLite Encryption Extension (SEE)SQLite Crypt

但您可以使用 SQLite.Data 更改/设置数据库密码,如this article 所示。

【讨论】:

如果我使用了某种扩展,连接是否会像使用相同的扩展一样正常工作? 你的意思是如果你使用一些扩展来加密,是否仍然可以从c#中创建并打开到这个数据库的连接? 做了一些研究。不幸的是,我没有找到任何解决方案如何在 .Net 应用程序中访问 SQLite Crypt 或 SEE。这些扩展是用 C 语言构建的,没有可用的 COM 接口。我认为您应该给 SQLite.Data 一个机会,并检查是否可以在使用磁盘加密后从磁盘打开数据库。 我已经找到了解决我的问题的方法>>我将加密数据表中的行数据,然后在代码中调用加密的数据并将其传递给解密方法进行解密>>所以任何人都可以打开 SQLite 文件,但不知道它到底是什么意思。任何反馈 ? :) 如果您真的需要保护您的数据库和/或数据,我会使用 SQLite.Data 并为数据库设置密码。在您的表格中,我只会加密那些包含敏感数据的字段。其他任何事情都是不必要的努力。【参考方案3】:

尝试sqlitestudio.pl 担任编辑。 对于数据库类型,连接时选择System.Data.SQLite

【讨论】:

【参考方案4】:

不幸的是,只能从代码中添加、删除或更改 SQlite 文件中的密码。为此,您需要 System.Data.SQLite 命名空间,它将为您提供方法以及适配器和连接的东西。

【讨论】:

感谢您的关注,但是如果我是从代码中完成的,客户端可以在安装完成后打开它,并且 db 文件传输到程序文件不是吗?跨度> 因为在程序运行之前不会应用加密代码【参考方案5】:

您可以使用sq-lite .net 提供程序 (System.Data.SQLite) 的内置加密。 试试这个:

http://sqlite.phxsoftware.com/forums/t/130.aspxenter link description here

或使用:

SQLiteCrypt API

【讨论】:

以上是关于我可以密码加密 SQLite 数据库吗?的主要内容,如果未能解决你的问题,请参考以下文章

具有加密/密码保护的 SQLite

如何使用 aes 算法加密 sqlite 文件?

PDF用户密码可以用来解除加密吗?

JPA可以使用加密密码进行数据库连接吗

winform程序如何加密配置文件

检查使用 bCrypt 加密的密码 .. 我需要通过网络发送密码吗?