读书人

delphi 一个加解密程序。大神们看看 错

发布时间: 2012-04-06 12:22:24 作者: rapoo

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上编译运行通过

读书人网 >.NET

热点推荐