function Decrypt(Str, Key: string): string;
var
  KeyLen,KeyPos,Offset,SrcPos,SrcAsc,TmpSrcAsc:Integer;
  Dest:String;
  iStrL:Integer;
begin
try
  if Str<>'' then
  begin
    KeyLen:=Length(Key);
    KeyPos:=0;
    Offset:=StrToInt('$'+ Copy(Str,1,2));
    SrcPos:=3;
    repeat
      SrcAsc:=StrToInt('$'+ Copy(Str,SrcPos,2));
      if KeyPos < KeyLen Then KeyPos := KeyPos + 1
        else KeyPos := 1;
      TmpSrcAsc := SrcAsc xor ord(Key[KeyPos]);
      if TmpSrcAsc<=Offset then TmpSrcAsc:=255+TmpSrcAsc-Offset
        else TmpSrcAsc:=TmpSrcAsc-Offset;
      Dest:=Dest + Chr(TmpSrcAsc);
      Offset:=SrcAsc;
      SrcPos:=SrcPos+2;
    until SrcPos>=Length(Str);
    Result:=Dest;
  end
  else
    Result:='';
except
  Result := '';
end;
end;function Encrypt(Str, Key: string): string;
var
  KeyLen,KeyPos,Offset,SrcPos,SrcAsc:Integer;
  Dest :ShortString;
begin
  if Str<>'' then
  begin
    KeyLen:=Length(Key);
    KeyPos:=0;
    Randomize;
    Offset:=Random(256);
    Dest:=Format('%1.2x',[Offset]);
    for SrcPos := 1 to Length(Str) do
    begin
      SrcAsc:=(Ord(Str[SrcPos]) + Offset) MOD 255;
      if KeyPos < KeyLen then KeyPos:= KeyPos + 1
      else KeyPos:=1;
      SrcAsc:= SrcAsc xor ord(Key[KeyPos]);
      Dest:=Dest + Format('%1.2x',[SrcAsc]);
      Offset:=SrcAsc;
    end;
    Result:=Dest;
//    Result:='|'+Dest+'|';
  end
  else
    Result:='';
end;经检验下列声明的变量在代码中没有使用过。
iStrL:Integer;我弄了段代码,出了些问题,请问怎么使用这个加密模块?
unit Unit1; interface uses 
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms, 
  QDialogs, QStdCtrls; type 
  TForm1 = class(TForm) 
    Edit1: TEdit; 
    Edit2: TEdit; 
    Button1: TButton; 
    Button2: TButton; 
    Edit3: TEdit; 
    Edit4: TEdit; 
    Button3: TButton; 
    Edit5: TEdit; 
    Edit6: TEdit; 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    procedure Button3Click(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; var 
  Form1: TForm1; implementation 
uses uCrypt; 
{$R *.xfm} procedure TForm1.Button1Click(Sender: TObject); 
begin 
edit3.text:= Encrypt(edit1.text,abc); 
edit4.text:= Encrypt(edit2.text,abc); end; procedure TForm1.Button2Click(Sender: TObject); 
begin 
close; 
end; procedure TForm1.Button3Click(Sender: TObject); 
begin 
edit5.text:= Decrypt(edit3.text,abc); 
edit6.text:= Decrypt(edit4.text,abc); end; end. 
[Error] Unit1.pas(40): Undeclared identifier: 'abc' 
[Error] Unit1.pas(52): Undeclared identifier: 'abc' 
[Fatal Error] Project2.dpr(6): Could not compile used unit 'Unit1.pas' 
unit uCrypt; interface 
uses 
  SysUtils; function Encrypt(str,key:string):string; 
function Decrypt(str,key:string):string; implementation 
function Encrypt(Str, Key: string): string; 
var 
  KeyLen,KeyPos,Offset,SrcPos,SrcAsc:Integer; 
  Dest :ShortString; 
begin 
  if Str <>'' then 
  begin 
    KeyLen:=Length(Key); 
    KeyPos:=0; 
    Randomize; 
    Offset:=Random(256); 
    Dest:=Format('%1.2x',[Offset]); 
    for SrcPos := 1 to Length(Str) do 
    begin 
      SrcAsc:=(Ord(Str[SrcPos]) + Offset) MOD 255; 
      if KeyPos < KeyLen then KeyPos:= KeyPos + 1 
      else KeyPos:=1; 
      SrcAsc:= SrcAsc xor ord(Key[KeyPos]); 
      Dest:=Dest + Format('%1.2x',[SrcAsc]); 
      Offset:=SrcAsc; 
    end; 
    Result:=Dest; 
//    Result:='|'+Dest+'|'; 
  end 
  else 
    Result:=''; 
end; 
function Decrypt(Str, Key: string): string; 
var 
  KeyLen,KeyPos,Offset,SrcPos,SrcAsc,TmpSrcAsc:Integer; 
  Dest:String; begin 
try 
  if Str <>'' then 
  begin 
    KeyLen:=Length(Key); 
    KeyPos:=0; 
    Offset:=StrToInt('$'+ Copy(Str,1,2)); 
    SrcPos:=3; 
    repeat 
      SrcAsc:=StrToInt('$'+ Copy(Str,SrcPos,2)); 
      if KeyPos < KeyLen Then KeyPos := KeyPos + 1 
        else KeyPos := 1; 
      TmpSrcAsc := SrcAsc xor ord(Key[KeyPos]); 
      if TmpSrcAsc <=Offset then TmpSrcAsc:=255+TmpSrcAsc-Offset 
        else TmpSrcAsc:=TmpSrcAsc-Offset; 
      Dest:=Dest + Chr(TmpSrcAsc); 
      Offset:=SrcAsc; 
      SrcPos:=SrcPos+2; 
    until SrcPos>=Length(Str); 
    Result:=Dest; 
  end 
  else 
    Result:=''; 
except 
  Result := ''; 
end; 
end; 
end. 

解决方案 »

  1.   

    unit Unit1;interfaceuses
      SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
      QDialogs, QStdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Button1: TButton;
        Button2: TButton;
        Edit3: TEdit;
        Edit4: TEdit;
        Button3: TButton;
        Edit5: TEdit;
        Edit6: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
    const
      abc = 'key';implementation
    uses uCrypt;
    {$R *.xfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    edit3.text:= Encrypt(edit1.text,abc);
    edit4.text:= Encrypt(edit2.text,abc);end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    close;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
    edit5.text:= Decrypt(edit3.text,abc);
    edit6.text:= Decrypt(edit4.text,abc);end;end. 
      

  2.   

    abc沒有定義,如一樓的方法就應該可以解決了