⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_dataencrypt.pas

📁 MD5加密与解密的说明文件与,烦琐的加密不能解密
💻 PAS
字号:
unit Main_DataEncrypt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,IniFiles, Mask,
  DB, ADODB, RzButton, RzEdit, RzCmboBx, RzTabs, RzLstBox, RzChkLst,
  RzPanel, Grids, DBGrids, RzDBGrid, U_Basefrm, DBGridEh, RzPrgres;

type
  TMain_DataEncrypt_Frm = class(TFrmBase)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Label1: TLabel;
    RzEdit2: TRzEdit;
    RzEdit3: TRzEdit;
    Label3: TLabel;
    Image1: TImage;
    Image2: TImage;
    Label4: TLabel;
    RzComboBox1: TRzComboBox;
    RzButton1: TRzButton;
    RzButton2: TRzButton;
    Con1: TADOConnection;
    qry1: TADOQuery;
    Rzedit1: TRzComboBox;
    RzPageControl1: TRzPageControl;
    TabSheet1: TRzTabSheet;
    TabSheet2: TRzTabSheet;
    RzPanel1: TRzPanel;
    RzPanel2: TRzPanel;
    RzButton3: TRzButton;
    qry2: TADOQuery;
    qry3: TADOQuery;
    Label5: TLabel;
    qry4: TADOQuery;
    ds1: TDataSource;
    qry5: TADOQuery;
    lbl1: TLabel;
    RzCheckList1: TRzCheckList;
    RzButton4: TRzButton;
    RzCheckList2: TRzCheckList;
    RzButton6: TRzButton;
    RzButton5: TRzButton;
    RzDBGrid1: TRzDBGrid;
    RzProgressBar1: TRzProgressBar;
    Label2: TLabel;

    procedure FormCreate(Sender: TObject);
    procedure RzButton1Click(Sender: TObject);
    procedure RzButton2Click(Sender: TObject);
    procedure RzButton3Click(Sender: TObject);
    procedure RzButton4Click(Sender: TObject);
    procedure RzListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure RzButton5Click(Sender: TObject);
    procedure RzButton6Click(Sender: TObject);
  private
    { Private declarations }
    procedure DataBaseName_Ini;        //初始化当前SQL服务的所有用户库名
    procedure ServerName_Ini;          //初始化内网内的所有SQLSERVER服务器名
    function FieldHaveEncryptCheck_Ini:Boolean;        //因为MD5加密后不可逆所以要对当前表字段进行检查,如果已经加过密不能再次加密
  public
  end;

var
  Main_DataEncrypt_Frm: TMain_DataEncrypt_Frm;
  IniFilePath: string;        //配置文件路径
  TableName: string;          //选择表名
  FieldStr: string;           //当前选的字段
  FieldList: TStringList;     //保存初始选表结构和第一次选择的表字段信息

implementation
uses Main_DataEncrypt_Const,Global,UnitFyMd5,uODBCListSqlServers;
{$R *.dfm}

//从ini文件中读取已经保存的连接
procedure TMain_DataEncrypt_Frm.FormCreate(Sender: TObject);
var
  myIniFile: TIniFile;
begin
  IniFilePath := ExtractFilePath(Application.ExeName) + 'Config.ini';
  if FileExists(IniFilePath) then
  begin
      try
        myIniFile := TIniFile.Create(IniFilePath);
        RzEdit1.Text := myIniFile.Readstring('Connect','Server','');
        RzEdit2.Text := myIniFile.ReadString('Connect','UserID','');
        RzEdit3.Text := myinifile.ReadString('Connect','Password','');
        RzComboBox1.Text := myinifile.ReadString('Connect','DataBaseName','');
      finally
        myIniFile.Free;
      end;
  end;
  ServerName_Ini;
end;
//将当前的数据库连接信息写入ini文件
procedure TMain_DataEncrypt_Frm.RzButton2Click(Sender: TObject);
var
  myIni: TIniFile;
begin
  If FileExists(IniFilePath) then
  begin
    try
      myIni := TIniFile.Create(IniFilePath);
      myIni.WriteString('Connect','Server',Trim(RzEdit1.Text));
      myIni.WriteString('Connect','DataBaseName',Trim(RzComboBox1.Text));           
      myIni.WriteString('Connect','UserID',Trim(RzEdit2.Text));
      myIni.WriteString('Connect','Password',Trim(RzEdit3.Text));
      ShowMessage(MsgSaveIniInfoSuccess);
    finally
      myIni.Free;
    end;
  end;
end;

{
function TMain_DataEncrypt_Frm.ReadStrFromIni(IniFileName, Master,Detail: string): string;
var
  myIni: TIniFile;
begin
  try
    myIni := TIniFile.Create(IniFileName);
    Result := myIni.ReadString(Master,Detail,'');
  finally
    myIni.Free;
  end;
end;
}
procedure TMain_DataEncrypt_Frm.ServerName_Ini;
var
  Ls1: TStringList;
  Ls2: TStringList;
  I,J: Integer;
  SqlServerScanner:TServersSearcher;
begin
  inherited;
  {Ls1 := TStringList.Create;
  Ls2 := TStringList.Create;
  if GetServerList(Ls1) then
  begin
    for i := 0 to Ls1.Count -1 do
    begin
      if GetUsers(Ls1.Strings[I],Ls2) then
      begin
        for j := 0 to Ls2.Count - 1 do
        begin
          Rzedit1.Items.Add(Ls2.Strings[J]);
        end;
      end;
    end;
  end;
  Ls1.Destroy;
  Ls2.Destroy; }
  SqlServerScanner:=TServersSearcher.Create(Rzedit1.Items);
  SqlServerScanner.FreeOnTerminate:=True;
  SqlServerScanner.Resume;
end;


function TMain_DataEncrypt_Frm.FieldHaveEncryptCheck_Ini: Boolean;
var
  myIni: TIniFile;
  i: Integer;
  CompareStr: string;         //已经保存的加过密的字段
begin
  Result := False;
  if FileExists(IniFilePath) then
  begin
    myIni := TIniFile.Create(IniFilePath);
    try
      CompareStr := myini.ReadString('FieldCheck',TableName,'');
    finally
      myIni.Free;
    end;
  end;
  if Pos(FieldStr,CompareStr) > 0 then
  begin
    myIni := TIniFile.Create(IniFilePath);
    try
      myini.WriteString('FieldCheck',TableName,'');
      myIni.WriteString('FieldCheck',TableName,CompareStr);
    finally
      myIni.Free;
    end;
    ShowMessage(MsgFieldHaveExists);
    Result := false;
  end else
  begin
    myIni := TIniFile.Create(IniFilePath);
    try
      myIni.WriteString('FieldCheck',TableName,CompareStr + ',' + FieldStr);
    finally
      myIni.Free;
    end;
    Result := True;
  end;
end;
procedure TMain_DataEncrypt_Frm.DataBaseName_Ini;
var
  SqlStr: string;
begin
  SqlStr := 'SELECT name AS databasename FROM master.dbo.sysdatabases';
  if Con1.Connected then
  begin
    qry1.Connection := Con1;
    OpenDataSetEx(qry1,sqlstr);
    qry1.First;
    while not qry1.Eof do
    begin
      RzComboBox1.Items.Add(qry1.FieldbyName('DatabaseName').AsString);
      qry1.next;
    end;
  end;
end;

//创建SQL连接
procedure TMain_DataEncrypt_Frm.RzButton1Click(Sender: TObject);
var
  server,DataBase,UserID,Pwd: string;
  ConStr: string;
begin
  if Con1.Connected then
  begin
    Con1.Connected := False;
    RzButton1.Caption := MsgConnect;
    Image1.Visible := True;
    Image2.Visible := False;
    Exit;
  end;
  server := Trim(RzEdit1.Text);
  DataBase := Trim(RzComboBox1.Text);
  UserID := Trim(RzEdit2.Text);
  Pwd := Trim(RzEdit3.Text);
  ConStr := 'Provider=SQLOLEDB.1' +
            ';Data Source=' + server +
            ';User ID=' + UserID +
            ';Password=' + Pwd +
            ';Initial Catalog=' + DataBase +
            ';Persist Security Info=True';
  if not Con1.Connected then
    Con1.ConnectionString := ConStr;
  try
    Con1.Connected := True;
    Image1.Visible := False;
    Image2.Visible := True;
    DataBaseName_Ini;       
    RzButton1.Caption := MsgDisConnect;
  except
    Application.MessageBox(PChar(MsgConnectWrong),PChar(MsgPrompt),MB_OK);
    ModalResult := mrNone;
  end;
end;
//列出当前数据名称下的数据表
procedure TMain_DataEncrypt_Frm.RzButton3Click(Sender: TObject);
var
  SqlStr: string;
begin
  RzCheckList2.Items.Clear;
  if RzComboBox1.Text <> '' then
    SqlStr := ' select name as TableName from ' + RzComboBox1.Text + '.dbo.sysobjects where xtype=''U'' order by Name'
  else
    SqlStr := ' select name as TableName from dbo.sysobjects where xtype=''U'' order by Name';
  OpenDataSetEx(qry2,SqlStr);
  if not qry2.IsEmpty then
  begin
    qry2.First;
    while not qry2.Eof do
    begin
      RzCheckList2.Items.Add(qry2.fieldbyname('TableName').AsString);
      qry2.Next;
    end;
    RzCheckList2.ItemIndex := 1;
  end;
end;
//选择特处理字段
procedure TMain_DataEncrypt_Frm.RzButton4Click(Sender: TObject);
var
  Sqlstr: string;
begin
  RzCheckList1.Items.Clear;
  TableName := RzCheckList2.SelectedItem;
  if TableName <> '' then
  begin
    Sqlstr := 'select b.name as FieldName from ' + RzComboBox1.Text + '.dbo.sysobjects as a,dbo.syscolumns as b where  a.xtype=''U'' and a.name = ' +
              QuotedStr(TableName) + ' and a.id=b.id ';
    OpenDataSetEx(qry3,Sqlstr);
    if not qry3.IsEmpty then
    begin
      qry3.First;
      while not qry3.Eof do
      begin
        RzCheckList1.Items.Add(qry3.fieldbyname('FieldName').AsString);
        qry3.Next;
      end;
    end;  
  end;
end;

procedure TMain_DataEncrypt_Frm.RzListBox1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  TableName := RzCheckList2.SelectedItem;
  Application.ProcessMessages;
  RzButton4Click(Sender);
end;
//列出所有字段明文
procedure TMain_DataEncrypt_Frm.RzButton5Click(Sender: TObject);
var
  FieldStr2: string;
  Sqlstr: string;
  i: Integer;
begin
  FieldStr := '';
  for i := 0 to RzCheckList1.Items.Count -1 do
  begin
    FieldStr2 := '';
    if RzCheckList1.ItemChecked[I] then
    begin
      FieldStr2 := RzCheckList1.Items.Strings[I];
      FieldStr := FieldStr + ',' + FieldStr2;
    end;
  end;
  if pos(',',FieldStr) > 0 then
    FieldStr := Copy(FieldStr,Pos(',',FieldStr) + 1,length(fieldStr));
  if FieldStr <> '' then
    Sqlstr := 'select ' + FieldStr + ' from ' + TableName
  else
    sqlstr := 'select * from ' + TableName;
  OpenDataSetEx(qry4,Sqlstr);
  RzButton6.Enabled := True;
end;

procedure TMain_DataEncrypt_Frm.RzButton6Click(Sender: TObject);
var
  SqlStr: string;
  FieldName_Str: string;
  FieldValues: String;
  i: Integer;
begin
  for i := 0 to RzCheckList2.Items.Count -1 do
  begin
    if RzCheckList2.ItemChecked[I] then
    begin
      TableName := RzCheckList2.SelectedItem;
      //与初始化的表结构的比对过程
      if FieldHaveEncryptCheck_Ini then
      begin
        FieldStr := FieldStr + ',';
        if Pos(',',FieldStr) > 0 then
        begin
          FieldName_Str := Trim(Copy(FieldStr,1,Pos(',',FieldStr)-1));
          Delete(FieldStr,1,Pos(',',FieldStr)-1);
          qry4.First;
          while  not qry4.Eof do
          begin
            FieldValues := Trim(qry4.fieldbyname(FieldName_Str).AsString);
            SqlStr := 'Update ' + TableName + ' set ' + FieldName_Str + '=' +
                      quotedstr(unitfymd5.md5tostring(UnitFyMd5.md5(Trim(qry4.fieldbyname(FieldName_Str).AsString)))) +
                      ' where ' + FieldName_Str + ' = ' + quotedstr(FieldValues);
            Con1.BeginTrans;
            try
              OpenDataSetEx(qry5,SqlStr);
              Con1.committrans;
            except
              Con1.RollbackTrans;
              raise;
            end;

            qry4.Next;
          end;
        end;
        RzButton6.Enabled := False;
      end else
      begin
        Exit;
      end;
    end;
  end;
end;


initialization
  FieldList := TStringList.Create;
  FieldList.Sorted := False;
  FieldList.Duplicates := dupAccept;
finalization
  FieldList.Free;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -