function Decrypt(const S: String): String;
var
I: byte;
Key: Word;
begin
Key := Keyword;
SetLength(Result,Length(S));
for I := 1 to Length(S) do
begin
Result[I] := char(byte(S[I]) xor (Key shr 8));
Key := (byte(S[I]) + Key) * 21469+ 12347;
end;
end;
已知(byte(S[I]) + Key) * 21469+ 12347的计算结果为:570636898但Key的数据类型为word输出Key 的时候结果不是570636898呢?输出的时候key 是一个比570636898小很多的值,没有超过65535的上限
解决方案 »
- delphi 怎么遍历所有控件 及 取得控件里的值(注意!!不是控件名)
- delphi +sqlserver 2000怎样备份数据库和恢复数据库????
- 高分来啦,要详细点哦.最好可以email个例子给我:)
- 年月怎么加?
- delphi 怎样控制 flowpanel 里控件间的距离
- 数据库操作时报错,在线求助
- 怎么样取TMemoryStream的一段 赋值给String ?
- 关于关闭窗口的问题
- 请各位大师帮忙?为什么Dephi5.0在win2000下不能安装成功?
- 请问哪里有INSTALLSHIELD FOR DELPHI5下载?
- Free和Destroy应该用那个?
- 祝朋友国庆快乐!顺便请教个问题:读取固定标题的CSV,有什么好办法吗?
570636898
我现在的问题就是给
Key := (byte(S[I]) + Key) * 21469+ 12347;
这一句它不会出错
并且我messagebox输出Key 和(byte(S[I]) + Key) * 21469+ 12347的值不一样!
不要把
Key: Word改成
Key: Integer
Key := (byte(S[I) + Key) * 21469+ 12347;]
大哥这代码不是我写的,而是正常运行的程序里面取出来的!
messagebox(inttostr((byte(S[I]) + Key) * 21469+ 12347)) 弹出来是570636898
messagebox(inttostr((byte(S[I]) + Key) * 21469+ 12347))弹出来是40000多的值等式两边不一样,谁能告诉我为什么?
一个是 word值, word值是不会超过 65535的
你一个 word值 65535 你再+1 就变成0了
下面那个是 从 integer 转成 str的, 所以他不受 限制.
我不是学Delphi的我用的是.net正在翻译这个函数按照您的意思就是说40000是570636898除以N得出来的余数是吗?
1.这句的意思是KEY值等于后面结果取低8位,相当于KEY=word(*);
2.错误的估计了值的范围,本来需要integer的用了word
这个函数应该是个加密或解密字符串的,按我的理解简单解释一下,希望对你有用.function Decrypt(const S: String): String;
//函数参数和返回值都是字符串,如果不是delphi2010及以后版本写的,那这个就是ansi字符串,
var
I: byte;
Key: Word;
//定义两个临时变量
begin
Key := Keyword;//Keyword应该是其它地方定义的加解密关键字,16位
SetLength(Result,Length(S));//设置返回串长度等于源串,给返回字符串申请空间
for I := 1 to Length(S) do//以字符串长度为循环
begin
Result[I] := char(byte(S[I]) xor (Key shr 8));//返回值字符串的第I个字符,等于源字符串第I个字符的ASCII码,8位,和KEY的高8位异或运算
Key := (byte(S[I]) + Key) * 21469+ 12347;//加密关键字等于源字符串第I位的ASCII值 ,8位,加上KEY的本来值,再乘以21469,加上12347,最后取低16位.
end;
end;大约就这样吧,不知道理解有没有错误.
word 0 ~ 65535(2^16-1) 2 无符号16位