我想作一个简单的数字数据加密函数,但是在运行就是达不到效果,源码如下(测试用的源码)
{$R *.dfm}
function chartonum(const valus:integer):char; //加密函数
begin
case valus of
1:result:=chr(valus+64);
2:result:=chr(valus+70);
3:result:=chr(valus+72);
4:result:=chr(valus+58);
5:result:=chr(valus+83);
6:result:=chr(valus+67);
7:result:=chr(valus+75);
8:result:=chr(valus+78);
9:result:=chr(valus+80);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
tstr:string;
begin
tstr:='';
for i:=1 to length(edit1.Text) do
begin
tstr:=chartonum(strtoint(copy(edit1.Text,i,1)));
tstr:=tstr+tstr;
end;
edit2.Text:=tstr;
end;
end.
问题是我想借tstr来累加起来赋值到edit2中显示在edit1中输入数字后的加密情况,如edit1中输入‘12345’,本在edit2中就显示“AHK>X”可是现在只显示最后一个“XX”,也就是讲tstr:=tstr+tstr;并没有累加上去。不知这种算法是怎样的写,同时反过来解码的函数试了几次都编译不过,有高人能否指点一二解密函数
function numtochar(const nstr:string):integer;
begin
if nstr='A' then
result:=strtoint(nstr-64);
if nstr='H' then
result:=strtoint(nstr-70);
....
end;
{$R *.dfm}
function chartonum(const valus:integer):char; //加密函数
begin
case valus of
1:result:=chr(valus+64);
2:result:=chr(valus+70);
3:result:=chr(valus+72);
4:result:=chr(valus+58);
5:result:=chr(valus+83);
6:result:=chr(valus+67);
7:result:=chr(valus+75);
8:result:=chr(valus+78);
9:result:=chr(valus+80);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
tstr:string;
begin
tstr:='';
for i:=1 to length(edit1.Text) do
begin
tstr:=chartonum(strtoint(copy(edit1.Text,i,1)));
tstr:=tstr+tstr;
end;
edit2.Text:=tstr;
end;
end.
问题是我想借tstr来累加起来赋值到edit2中显示在edit1中输入数字后的加密情况,如edit1中输入‘12345’,本在edit2中就显示“AHK>X”可是现在只显示最后一个“XX”,也就是讲tstr:=tstr+tstr;并没有累加上去。不知这种算法是怎样的写,同时反过来解码的函数试了几次都编译不过,有高人能否指点一二解密函数
function numtochar(const nstr:string):integer;
begin
if nstr='A' then
result:=strtoint(nstr-64);
if nstr='H' then
result:=strtoint(nstr-70);
....
end;
解决方案 »
- delphi xe2 用vcl style designer设计皮肤。
- delphi如何实现酒店管理系统房台图?
- 不解决问题不吃饭:DELPHI ADO+SQL SERVER 2000做的程序,客户端怎么连接有问题
- Delphi7的Unicode问题.
- 散分!请问这样的软件怎么报价?
- 怎样找游戏的句柄?比如星际争霸,CS之类的,这样的窗体没有标题栏
- ODBC的用法,通过它怎么建立连接~!~!
- 如何實現影院售票系統中座位的繪制與分配後的顔色或圖形變化?
- 如何在我的程序里面关闭PHOTOSHOP 打开的图片编辑子窗口,而不关闭PHOTOSHOP
- 请教各位高手一个delphi打包的问题
- 简单数学题,我循环时出错,给个代码参考下
- 请问这个语句该怎么写
strSum:=strSum+tstr;
KeyList = 'AHK>XIRVY';function Encrypt(AString: String): String;
var
iLoop : Integer;
begin
Result := '';
for iLoop := 1 to Length(AString) do
if AString[iLoop] in ['1'..'9'] then
Result := Result + KeyList[Ord(AString[iLoop]) - Ord('0')];
end;function DeEncrypt(AString: String): String;
var
iLoop : Integer;
iPos : Integer;
begin
Result := '';
for iLoop := 1 to Length(AString) do
begin
iPos := Pos(AString[iLoop], KeyList);
if iPos > 0 then Result := Result + Chr(iPos + Ord('0'));
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := Encrypt(Edit1.Text);
ShowMessage(DeEncrypt(Edit2.Text));
end;
你的nstr是string类型,不能直接来-64的。。
可以像楼上这么
result:=ord(nstr)-64;
if AString[iLoop] in ['0'..'9'] then
edit2中什么都没有,假如edit1中有0的话
begin
if nstr='A' then
result:=strtoint(chr(strtoint(nstr)-64));
if nstr='U' then
result:=strtoint(chr(strtoint(nstr)-85));
if nstr='H' then
result:=strtoint(chr(strtoint(nstr)-70));
if nstr='K' then
result:=strtoint(chr(strtoint(nstr)-72));
if nstr='>' then
result:=strtoint(chr(strtoint(nstr)-58));
if nstr='x' then
result:=strtoint(chr(strtoint(nstr)-83));
....
end;
procedure TForm1.Button2Click(Sender: TObject);
var
n:integer;
ystr,kstr:integer;
begin
for n:=1 to length(edit1.Text) do
begin
ystr:=numtochar(copy(edit1.Text,n,1)); 但是这里却编译不过,不知是为什么
kstr:=kstr+ystr;
end;
edit2.Text:=inttostr(kstr);
end;
end;
KeyList = '?AHK>XIRVY'; //?是0对应的加密后的字符function Encrypt(AString: String): String;
var
iLoop : Integer;
begin
Result := '';
for iLoop := 1 to Length(AString) do
if AString[iLoop] in ['0'..'9'] then
Result := Result + KeyList[Ord(AString[iLoop]) - Ord('0') + 1];
end;function DeEncrypt(AString: String): String;
var
iLoop : Integer;
iPos : Integer;
begin
Result := '';
for iLoop := 1 to Length(AString) do
begin
iPos := Pos(AString[iLoop], KeyList);
if iPos > 0 then Result := Result + Chr(iPos + Ord('0') - 1);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := Encrypt(Edit1.Text);
ShowMessage(DeEncrypt(Edit2.Text));
end;
KeyList = 'AHK>XIRVY';function Encrypt(AString: String): String;
var
iLoop : Integer;
begin
Result := '';
for iLoop := 1 to Length(AString) do
if AString[iLoop] in ['1'..'9'] then
Result := Result + KeyList[Ord(AString[iLoop]) - Ord('0')]
else
Reusut := Result + Astring[iLoop];
end;=========================================
路过...
tstr:=tstr+tstr;这边不是明显的错误吗
你让tstr=chartonum()后整个变量的值都改变了
后面再tstr:=tstr+tstr;有什么用。
由于你是放在循环里的,所以到了最后就变成tmp:=chartonum(Right(edit1.text,1));result:=tmp+tmp;了