zoukankan      html  css  js  c++  java
  • SQLite实现加密

    SQLite3 4 Delphi:Delphi中操作SQLite库。项目主页:http://code.google.com/p/sv-utils/最新库下载:http://sv-utils.googlecode.com/files/SQLite3_4_Delphi_RC2.zip

    wxsqlite:这是wxWidgets组件之一,我们用它来实现加密。下载地址: http://jaist.dl.sourceforge.net/project/wxcode/Components/wxSQLite3/wxsqlite3-3.0.3.zip

    下载完上述两个文件后,分别取两个文件中的部分文件:

    1,SQLite3 4 Delphi:取“SQLite\sv-utils\SQLite3\Source”目录下3个文件:“SQLite3.pas”、“SQLiteTable3.pas”、“sv.inc”,放到工程里,并     把SQLite3.pas”、“SQLiteTable3.pas”这两个文件添加到工程里,在使用地方引入这两个单元。

    2,wxsqlite:取“wxsqlite3-3.0.3\sqlite3\secure\aes128\dll\release”下的“sqlite3.dll”,放到程序运行目录中。

    上面文件准备完毕后,就已经完成对数据库加密需要的全部文件了。

    演示代码:

    unit Unit1;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
    
    type
      TForm2 = class(TForm)
        logMemo: TMemo;
        clearLogBtn: TButton;
        Button2: TButton;
        dbNameEdt: TEdit;
        Label1: TLabel;
        passwordEdt: TEdit;
        Label2: TLabel;
        createTableBtn: TButton;
        insertDataBtn: TButton;
        deleteDataBtn: TButton;
        selectDataBtn: TButton;
        procedure clearLogBtnClick(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure createTableBtnClick(Sender: TObject);
        procedure insertDataBtnClick(Sender: TObject);
        procedure selectDataBtnClick(Sender: TObject);
        procedure deleteDataBtnClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure MyLog(tempLog: string); // log方法
      end;
    
    var
      Form2: TForm2;
    
      logInfo: string; // log信息
    
    implementation
    
    {$R *.dfm}
    
    uses SQLite3, SQLiteTable3;
    
    procedure TForm2.Button2Click(Sender: TObject);
    var
      sldb: TSQLiteDatabase;
      sltb: TSQLiteTable;
      sSQL: String;
      dbName: string; // 数据库名
      password: string; // 密码
    begin
    
      dbName := trim(dbNameEdt.Text);
      password := trim(passwordEdt.Text);
    
      try
        sltb := nil;
        sldb := TSQLiteDatabase.Create(dbName, seUTF8, password);
        sldb.ChangePassword(password);
    
        MyLog('加密数据库创建完毕:数据库 = ' + dbName + ' ; 密码 = ' + password);
    
      finally
        sldb.Free;
        if sltb <> nil then
        begin
          sltb.Free;
        end;
      end;
    
    end;
    
    procedure TForm2.clearLogBtnClick(Sender: TObject);
    begin
      logMemo.Clear;
    end;
    
    // 创建表
    procedure TForm2.createTableBtnClick(Sender: TObject);
    var
      sldb: TSQLiteDatabase;
      sltb: TSQLiteTable;
      sSQL: String;
      dbName: string; // 数据库名
      password: string; // 密码
    begin
    
      dbName := trim(dbNameEdt.Text);
      password := trim(passwordEdt.Text);
    
      try
        sltb := nil;
        sldb := TSQLiteDatabase.Create(dbName, seUTF8, password);
        sldb.ChangePassword(password);
    
        sSQL := 'CREATE TABLE IF NOT EXISTS [test] (';
        sSQL := sSQL + '[a] VARCHAR(100)  NULL,';
        sSQL := sSQL + '[b] VARCHAR(100)  NULL';
        sSQL := sSQL + ')';
    
        sldb.ExecSQL(sSQL);
    
        MyLog('创建表: test');
    
      finally
        sldb.Free;
        if sltb <> nil then
        begin
          sltb.Free;
        end;
      end;
    end;
    
    procedure TForm2.deleteDataBtnClick(Sender: TObject);
    var
      sldb: TSQLiteDatabase;
      sltb: TSQLiteTable;
      sSQL: String;
      dbName: string; // 数据库名
      password: string; // 密码
    begin
    
      dbName := trim(dbNameEdt.Text);
      password := trim(passwordEdt.Text);
    
      try
        sltb := nil;
        sldb := TSQLiteDatabase.Create(dbName, seUTF8, password);
        sldb.ChangePassword(password);
    
        sSQL := 'DELETE FROM [test] ';
        sldb.ExecSQL(sSQL);
    
        MyLog('删除数据完毕 ');
    
      finally
        sldb.Free;
        if sltb <> nil then
        begin
          sltb.Free;
        end;
      end;
    end;
    
    // 添加数据
    procedure TForm2.insertDataBtnClick(Sender: TObject);
    var
      sldb: TSQLiteDatabase;
      sltb: TSQLiteTable;
      sSQL: String;
      dbName: string; // 数据库名
      password: string; // 密码
      i: integer;
      maxCount: integer; // 添加数据最大数量
    begin
    
      dbName := trim(dbNameEdt.Text);
      password := trim(passwordEdt.Text);
    
      try
        sltb := nil;
        sldb := TSQLiteDatabase.Create(dbName, seUTF8, password);
        sldb.ChangePassword(password);
    
        maxCount := 9;
    
        for i := 0 to maxCount do
        begin
          sSQL := 'INSERT INTO [test] VALUES (';
          sSQL := sSQL + QuotedStr('a' + inttostr(i)) + ',';
          sSQL := sSQL + QuotedStr('b' + inttostr(i));
          sSQL := sSQL + ')';
    
          sldb.ExecSQL(sSQL);
        end;
    
        MyLog('共添加: ' + inttostr(maxCount + 1) + ' 条数据');
    
      finally
        sldb.Free;
        if sltb <> nil then
        begin
          sltb.Free;
        end;
      end;
    end;
    
    // log方法
    procedure TForm2.MyLog(tempLog: string);
    var
      temp: string;
      oldLog: string;
    begin
      if trim(tempLog) <> '' then
      begin
    
        oldLog := trim(logMemo.Text);
        logMemo.Clear;
    
        temp := FormatDateTime('yyyy-mm-dd hh:mm:ss', now) + ' ' + trim(tempLog);
        if oldLog = '' then
        begin
          logMemo.Lines.Add(temp);
          logMemo.Lines.Add('');
        end
        else
        begin
          logMemo.Lines.Add(temp);
          logMemo.Lines.Add('');
          logMemo.Lines.Add(oldLog);
        end;
    
      end;
    
    end;
    
    procedure TForm2.selectDataBtnClick(Sender: TObject);
    var
      sldb: TSQLiteDatabase;
      sltb: TSQLiteTable;
      sSQL: String;
      dbName: string; // 数据库名
      password: string; // 密码
      totalCount: integer;
      temp: string;
    begin
    
      dbName := trim(dbNameEdt.Text);
      password := trim(passwordEdt.Text);
    
      try
        sltb := nil;
        sldb := TSQLiteDatabase.Create(dbName, seUTF8, password);
        sldb.ChangePassword(password);
    
        sSQL := 'SELECT * FROM [test] ';
        sltb := sldb.GetTable(sSQL);
    
        // 1,显示总数据条数
    
        totalCount := 0;
        if not sltb.EOF then
        begin
          totalCount := sltb.Count;
        end;
    
        MyLog('共: ' + inttostr(totalCount) + ' 条数据');
    
        // 2,显示详细信息
    
        temp := '';
    
        while not sltb.EOF do
        begin
    
          if temp = '' then
          begin
            temp := #13#10 + sltb.FieldValByNameAsString['a'] + ' ; ' +
              sltb.FieldValByNameAsString['b'] + #13#10;
          end
          else
          begin
            temp := temp + sltb.FieldValByNameAsString['a'] + ' ; ' +
              sltb.FieldValByNameAsString['b'] + #13#10;
          end;
    
          sltb.Next;
        end;
    
        if temp <> '' then
        begin
          MyLog('详细数据:' + #13#10 + temp);
        end;
    
      finally
        sldb.Free;
        if sltb <> nil then
        begin
          sltb.Free;
        end;
      end;
    end;
    
    end.



  • 相关阅读:
    mysqlbinlog
    MySQL二进制日志
    Slave I/O: Got fatal error 1236
    Zabbix监控nginx-rtmp status(json版)
    shell命令find
    Zabbix监控mysql performance
    Zabbix监控disk performance
    MySQL复制配置(多主一从)
    数据建立和保持时间
    Source insight 中 标题栏路径显示完整路径的方法
  • 原文地址:https://www.cnblogs.com/sunylat/p/6119124.html
Copyright © 2011-2022 走看看