delphi 一个加解密程序。大神们看看 错在那?
- Delphi(Pascal) code
unit password;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TFrmpwd = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private function encrypt_jia(s:string):String; function encrypt_free(s:string):string; { Private declarations } public { Public declarations } end;var Frmpwd: TFrmpwd;implementation{$R *.dfm}//加密函数function TFrmpwd.encrypt_jia(s:string):String;var i,j,k: Integer; s1: string;begin s1 := ''; j := Length(s); for i := 1 to j do begin k := j * j - i * i + 3; s1 := s1 + Chr(ord(s) + k); end; result := s1;end;//解密函数function TFrmpwd.encrypt_free(s:string):String;var i,j,k: Integer; s1: string;begin s1 := ''; j := Length(s); for i := 0 to j do begin k := j * j - i * i + 3; s1 := s1 + Chr(ord(s) - k); end; result := s1;end;//执行加密procedure TFrmpwd.Button1Click(Sender: TObject);var ss,st: string;begin ss := Edit1.Text; Edit2.Text := UTF8Encode(encrypt_jia(ss));end;//执行解密procedure TFrmpwd.Button2Click(Sender: TObject);var ss:string;begin ss := Edit3.Text; Edit4.Text := encrypt_free(ss);end;end.测试的时候 显示的都是乱码,为什么?
12345678 加密后 龛龆
龛龆 解密后 鼙鼢鼽
求教大神
[解决办法]
function StrEnCrypt(Str: string): string; //加密字符串函数
var
i,Len: integer;
C,H4,L4: Byte;
s: string;
begin
Len:=Length(Str);
s:='';
for i:=1 to Len do
begin
C:=Ord(Str[i]);
C:=C xor $A8;
H4:=(C and $F0) shr 4;
L4:=C and $0F;
C:=(L4 shl 4) or H4;
s:=s+Chr(C);
end;
Result:=s;
end;
function StrDeCrypt(Str: string): string; //解密字符串函数
var
i,Len: integer;
C,H4,L4: Byte;
s: string;
begin
Len:=Length(Str);
s:='';
for i:=1 to Len do
begin
C:=Ord(Str[i]);
H4:=(C and $F0) shr 4;
L4:=C and $0F;
C:=(L4 shl 4) or H4;
C:=C xor $A8;
s:=s+Chr(C);
end;
Result:=s;
end;
[解决办法]
看下你用delphi 的版本,Delphi7 的ord()函数只能给字符,也就是char型,而在2010下ord()可以接受字符串了。
如果是delphi7,在for循环里获取s[i]
[解决办法]
以上代码在delphi7、2010上编译运行通过