我可以帮助您翻译成中文:我能对SQLite数据库进行密码加密吗?

17

我正在使用C# Windows应用程序与SQLite数据库版本3。

我希望能够通过密码或其他加密方式来加密SQLite数据库文件,以防止客户从程序文件夹中打开它。

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

编辑

如果我从代码中加密它,当安装完成并将数据库文件转移到程序文件夹之前,客户端能否在打开程序执行加密操作之前打开它?


可能重复:https://dev59.com/bHM_5IYBdhLWcg3wcCnc - Maksim Vi.
1
我认为Hassan正在寻找一种非运行时加密。 - Pilgerstorfer Franz
5个回答

24

我使用的是 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数据库并对其进行加密,如果我想手动编辑数据库中的某个表,那么有没有解密它的方法?我需要编写什么代码来实现这一点? - Mogli
我认为除了编写代码没有其他方法。你能做的就是用这段代码制作一个独立的应用程序,将密码留空并要求输入旧密码来访问它。 - Luis Granado
我使用了这段代码:con.Open();con.ChangePassword("Mypass"); con.Close(); 现在它已经被加密了,但我想手动更改密码并打开它,我该怎么做? - Mogli
我在 SQLiteConnection.CreateFile() 时间设置了密码。 - Jack
这对我有用。谢谢。但缺点是,即使您知道密码,仍无法打开DB文件。是否有办法查看受保护的DB文件? - Saikat Chakraborty

3
在这个论坛中找到了一篇文章,指出标准的SQLite3 API没有提供任何形式的保护,并且只依赖底层操作系统权限机制(如果有的话)来进行“安全”保护。如果您有一个现有的SQLite-style数据库,它使用特定的API来访问,那么您应该使用这个特定的(非标准的)API。
如果您可以/想要使用SQLite的某种扩展,您还可以尝试SQLite加密扩展(SEE)SQLite Crypt
但是,您可以使用SQLite.Data来更改/设置数据库的密码,如本文所示。

如果我使用某种扩展程序,连接是否会像使用相同扩展程序时一样良好? - Hassanation
你的意思是,如果使用某些扩展进行加密,是否仍然可以从C#中创建和打开与该数据库的连接? - Pilgerstorfer Franz
1
做了一些研究。不幸的是,我没有找到任何解决方案来在 .Net 应用程序中访问 SQLite Crypt 或 SEE。这些扩展是用 C 构建的,没有可用的 COM 接口。我认为你应该给 SQLite.Data 一个机会,并检查是否可能使用它打开已加密的磁盘上的数据库。 - Pilgerstorfer Franz
我已经找到了解决我的问题的方法>> 我将加密数据表中的行数据,然后在代码中调用加密数据并将其传递给解密方法进行解密>> 这样任何人都可以打开SQLite文件,但不知道它确切的含义。有任何反馈吗? :) - Hassanation
1
如果您真的需要保护您的数据库和/或数据,我建议使用SQLite.Data并为数据库设置密码。在您的表中,我只会加密包含敏感数据的字段。在我看来,其他任何措施都是不必要的努力。 (请注意,由于汉语字符比英语字符更宽,翻译文本可能会比原文略微更长一些。) - Pilgerstorfer Franz

3

尝试使用 sqlitestudio.pl 作为编辑器。
在连接时,选择 System.Data.SQLite 作为数据库类型。


1

很遗憾,SQlite文件中的密码只能通过代码添加、删除或更改。为此,您需要使用System.Data.SQLite命名空间,该命名空间将为您提供方法以及适配器和连接等内容。


感谢您的关注,但如果我从代码中完成它,当安装完成并且_db_文件传输到程序文件时,客户端可以打开它,不是吗? - Hassanation
只有在程序运行时才会应用加密代码。 - Hassanation

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接