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.
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.
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.