5.5.2 Sqlite加密

一、C#版Sqlite加密

1、创建空的sqlite数据库。

数据库名的后缀你可以直接指定,甚至没有后缀都可以

  1. //方法一:创建一个空sqlite数据库,用IO的方式
  2. FileStream fs = File.Create("c://test.db");
  3. //方法二:用SQLiteConnection
  4. SQLiteConnection.CreateFile("c://test.db");

创建的数据库是个0字节的文件。

2、创建加密的空sqlite数据库

创建一个密码为password的空的sqlite数据库

  1. SQLiteConnection.CreateFile"c://test2.db");
  2. SQLiteConnection cnn = new SQLiteConnection("Data Source=c://test2.db");
  3. SQLiteConnection cnn = new SQLiteConnection("Data Source=D://test2.db");
  4. cnn.Open();
  5. cnn.ChangePassword("password");

3、给未加密的数据库加密

  1. SQLiteConnection cnn = new SQLiteConnection("Data Source=c://test.db");
  2. cnn.Open();
  3. cnn.ChangePassword("password");

4、打开加密sqlite数据库

  1. //方法一
  2. SQLiteConnection cnn = new SQLiteConnection("Data Source=c://test2.db");
  3. cnn.SetPassword("password");
  4. cnn.Open();
  5. //方法二
  6. SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder();
  7. builder.DataSource = @"c:/test.db";
  8. builder.Password = @"password";
  9. SQLiteConnection cnn = new SQLiteConnection(builder.ConnectionString);
  10. cnn .Open();

注: A、因为加密的函数是利用windows api,故加密后的数据库只能适用在windows平台,加密的方式是整体文件加密。 B、加密的算法是RC4,如果你想采用别的加密算法来加密,请参考ADO.NET 2.0 SQLite Data Provider 的源码来修改。 C、相关sqlite数据库操作类似ADO.NET 2.0。详见ADO.NET 2.0 SQLite Data Provider的帮助文档。 D、ADO.NET 2.0 SQLite Data Provider 版本为:1.0.53.0 ,SQLite版本 : 3.6.0。 E、开发环境为vs2008。

ADO.NET 2.0 SQLite Data Provider下载

5、代码实例

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.IO;//引用
  9. using System.Data.SQLite; //sqlite
  10. namespace sMap
  11. {
  12. public partial class Form1 : Form
  13. {
  14. //
  15. //定义初始坐标
  16. //
  17. public static double sdX = null;
  18. public static double sdY = null;
  19. public static string Addr = null;
  20. public static string db_str = null;
  21. //
  22. //数据库处理
  23. //
  24. public void SQLite_DB()
  25. {
  26. try
  27. {
  28. //数据库连接
  29. SQLiteConnection m_dbConnection = null;
  30. m_dbConnection = new SQLiteConnection(db_str);
  31. //打开数据库
  32. m_dbConnection.SetPassword("2017");
  33. m_dbConnection.Open();
  34. //m_dbConnection.ChangePassword("2017");//给未加密数据库加密(为空时取消加密)
  35. //使用sql查询语句,找到坐标
  36. string sql = String.Format("select Address,Lngb,Latb from bs_460 where MCC = 460 and MNC={0:G} and AC={1:G} and CI={2:G}", (mnc.Text), (lac.Text), (cellid.Text));
  37. SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
  38. SQLiteDataReader reader = command.ExecuteReader();
  39. if (reader.Read()) //先在bs_460表中查找
  40. {
  41. Addr = reader.GetString(0);
  42. sdX = reader.GetDouble(1);
  43. sdY = reader.GetDouble(2);
  44. }
  45. else //未找到则在bs_cdma_460表中查找
  46. {
  47. string sql_cdma = String.Format("select Address,Lngb,Latb from bs_cdma_460 where MCC = 460 and SID={0:G} and NID={1:G} and BID={2:G}", (mnc.Text), (lac.Text), (cellid.Text));
  48. SQLiteCommand command_cdma = new SQLiteCommand(sql_cdma, m_dbConnection);
  49. SQLiteDataReader reader_cdma = command_cdma.ExecuteReader();
  50. if (reader_cdma.Read())
  51. {
  52. Addr = reader_cdma.GetString(0);
  53. sdX = reader_cdma.GetDouble(1);
  54. sdY = reader_cdma.GetDouble(2);
  55. }
  56. else
  57. {
  58. MessageBox.Show("请输入正确信息!");
  59. }
  60. }
  61. Console.ReadLine();
  62. //关闭数据库
  63. m_dbConnection.Close();
  64. }
  65. catch (Exception ex)
  66. {
  67. MessageBox.Show("数据库处理异常,请重试!");
  68. }
  69. }
  70. }
  71. }

System.Data.SQLite.DLL下载


打赏

微信支付 支付宝支付

License

本作品由Simonhttp://www.uusystem.com)创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 欢迎转载,但任何转载必须保留完整文章,在显要地方显示此声明以及原文链接。如您有任何疑问或者授权方面的协商,请邮件:postmaster@uusystem.com。