C# 如何解密/打开(.db)SQLite数据库文件
如何打开扩展名为.db的SQLite数据库文件 我已经为SQLite下载了一个DB浏览器。 当我尝试打开数据库文件时,弹出一个新窗口,名为“标题为SQLCipher Encryption”,询问用于加密的密码和文件大小(与确切的“文件大小”混淆…?) 我有一个应用程序源代码,我设法找到了密码,并尝试使用默认页面大小1024 尝试了几次,但无法打开C# 如何解密/打开(.db)SQLite数据库文件,c#,sqlite,encryption,connection,C#,Sqlite,Encryption,Connection,如何打开扩展名为.db的SQLite数据库文件 我已经为SQLite下载了一个DB浏览器。 当我尝试打开数据库文件时,弹出一个新窗口,名为“标题为SQLCipher Encryption”,询问用于加密的密码和文件大小(与确切的“文件大小”混淆…?) 我有一个应用程序源代码,我设法找到了密码,并尝试使用默认页面大小1024 尝试了几次,但无法打开 public void ReadRecord(string sql) { try {
public void ReadRecord(string sql)
{
try
{
this.sqlite_cmd.CommandText = this.cSql;
this.sqlite_datareader = this.sqlite_cmd.ExecuteReader();
if (this.sqlite_datareader.Read())
{
this.sAddEdit = "E";
this.txt1.Tag = this.sqlite_datareader["id"];
this.txt1.Text = this.sqlite_datareader["f0"].ToString();
this.txt2.Text = this.sqlite_datareader["f1"].ToString();
this.txt3.Text = this.sqlite_datareader["f2"].ToString();
this.txt4.Text = this.sqlite_datareader["f3"].ToString();
this.txt5.Text = this.sqlite_datareader["f4"].ToString();
this.dtpListDate.Text = this.sqlite_datareader["f5"].ToString();
this.txt7.Text = this.sqlite_datareader["f6"].ToString();
this.txt8.Text = this.sqlite_datareader["f7"].ToString();
this.txt9.Text = this.sqlite_datareader["f8"].ToString();
this.txt10.Text = this.sqlite_datareader["f9"].ToString();
this.txt11.Text = this.sqlite_datareader["f10"].ToString();
this.txt12.Text = this.sqlite_datareader["f11"].ToString();
this.txt13.Text = this.sqlite_datareader["f12"].ToString();
this.txt14.Text = this.sqlite_datareader["f13"].ToString();
this.txt15.Text = this.sqlite_datareader["f14"].ToString();
this.txt16.Text = this.sqlite_datareader["f15"].ToString();
this.txt17.Text = this.sqlite_datareader["f16"].ToString();
this.txt18.Text = this.sqlite_datareader["f17"].ToString();
this.txt19.Text = this.sqlite_datareader["f18"].ToString();
this.txt20.Text = this.sqlite_datareader["f19"].ToString();
this.txt21.Text = this.sqlite_datareader["f20"].ToString();
this.txt22.Text = this.sqlite_datareader["f21"].ToString();
this.txt23.Text = this.sqlite_datareader["f22"].ToString();
this.txt24.Text = this.sqlite_datareader["f23"].ToString();
this.txt25.Text = this.sqlite_datareader["f24"].ToString();
this.txt26.Text = this.sqlite_datareader["f25"].ToString();
this.txt27.Text = this.sqlite_datareader["f26"].ToString();
this.txt28.Text = this.sqlite_datareader["f27"].ToString();
this.txt29.Text = this.sqlite_datareader["f28"].ToString();
this.txt30.Text = this.sqlite_datareader["f29"].ToString();
}
this.sqlite_datareader.Close();
}
catch (Exception exception)
{
MessageBox.Show("A Error" + exception.ToString() + " Occcured Please Try Again or contact supplier", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
}
在命名空间中
using Microsoft.VisualBasic.PowerPacks;
using System;
using System.ComponentModel;
using System.Data;
using System.Data.SQLite;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
1。关于您关于页面大小的问题, 请参阅 1.3.2。页面大小 从偏移量16开始的两字节值确定数据库的页面大小。对于SQLite版本3.7.0.1(2010-08-04)和更早版本,此值被解释为大端整数,并且必须是介于512和32768之间(包括512和32768)的二次幂。从SQLite版本3.7.1(2010-08-23)开始,支持65536字节的页面大小。值65536不适合两字节整数,因此要指定65536字节的页面大小,偏移量16处的值为0x00 0x01。这个值可以解释为大端1,并被认为是一个代表65536页面大小的神奇数字。或者,可以将双字节字段视为一个小的endian数,并说它表示页面大小除以256。页面大小字段的这两种解释是等效的 您可以在普通sqlite3.exe命令行shell程序中使用“.dbinfo”命令检查数据库的大小。第一个信息是尺寸
database page size: 4096
2。关于数据库解密
假设数据库是加密的,并且您拥有正确的密码,(它是以x'或0x开头的吗?),您是否设法使用数据库浏览器应用程序手动打开了数据库?),您必须先解密数据库,然后才能读取它。请参阅以了解有关SQLite加密(和解密)的更多信息
我建议使用一些开源的书面密码。只需在谷歌上搜索一下,看看哪一个适合你工作 嘿,@ArtjomB。仅供参考,我已共享代码欢迎使用stackoverflow。您想对FillHeader()做什么?而且似乎缺少SqlCommand的语法..谢谢@KayLee我只想打开文件并检查我的工作:我已经替换了FillHeader();代码包含SqlCommandMy代码只是确认连接是否打开。然而,为了读取数据库中的内容,您需要知道数据库的结构,比如表、列、数据类型的名称。否则,您必须使用DB浏览器或Server Management Studio。它是免费的,可以下载。整个
尝试/捕获(异常)
这样的反模式很糟糕。读一读。