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

📄 unitgetpass.pas

📁 用于开发税务票据管理的软件
💻 PAS
字号:
unit UnitGetPass;

interface

uses SysUtils,Classes,ExtCtrls;

  function GetPass(FileName:string;var MdbVer:string):string;
const
   PassSource2k:array[0..12] of Byte=($a1,$ec,$7a,$9c,$e1,$28,$34,$8a,$73,$7b,$d2,$df,$50);
   //Access97的异或源码
   PassSource97:array[0..12] of Byte=($86,$fb,$ec,$37,$5d,$44,$9c,$fa,$c6,$5e,$28,$e6,$13);
implementation

function GetPass(FileName:string;var MdbVer:string):string;
var
  F:TFileStream;
  PassStrTemp:array[0..26] of Byte;
  Ver,EncrypFlag:Byte;
  t1:char;
  Password:string;
  i:integer;
begin
  Try
    F :=TFileStream.Create(FileName,fmOpenRead);
    //取得数据库版本
    F.Seek($14,0);
    F.Read(Ver,1);
    //得到加密标志位
    F.Seek($62,0);
    F.Read(EncrypFlag,1);
    //读取密码到缓冲区
    F.Seek($42,0);
    F.Read(PassStrTemp,26);
  finally
    FreeAndNil(F);
  end;

  if Ver<1 then
  begin
     MdbVer:='Microsoft Access 97';
     if (Integer(PassStrTemp[0] xor PassSource97[0])=0) then begin
        Password:='';
        exit;
     end else begin
        Password:='';
        for i:=0 to 12 do
        begin
           Password:=Password+inttostr(PassStrTemp[i] xor PassSource97[i]);
        end;
     end;
  end else begin
     Password:='';
     MdbVer:='Microsoft Access 2000';
     for i:=0 to 12 do
     Begin
        if (i Mod 2)=0 then Begin
          t1:=Char(($13 xor EncrypFlag xor PassStrTemp[i*2] xor PassSource2k[i]));
        end else begin //每隔一个字节就与加密标志相异或。这里的加密标志为$13
          t1:=Char((PassStrTemp[i*2] xor PassSource2k[i]));
        end;
        Password:=Password+t1;
     end;
  end;
  if ((Password[1])<'a') or ((Password[1])>'z') then Password:='';
  Result:=Password;
end;
end.

⌨️ 快捷键说明

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