首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi 一个加解密程序。大神们看看 错在那?解决方案

2012-04-06 
delphi 一个加解密程序。大神们看看 错在那?Delphi(Pascal) codeunit passwordinterfaceusesWindows, Mess

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

热点排行