function encode($input)
{
$FlashFXP_Key = "yA36zA48dEhfrvghGRg57h5UlDv3";
if($input=="") return "";
$key = rand(1,255);
//$key = 15; //调试用的echo "动态Key".$key."<br>"; //随机255的数
if($key >0x0F){ //10进制的15
$result = strtoupper(dechex($key)); //10进制转换成16进制并大写
}else{
$result = "0".strtoupper(dechex($key)); //不足15 10进制的15是字母F补0就是0F了并大写
} $magic_number = $key; echo "magic_number".$magic_number."<br>"; //返回值貌似和上面的随机Key一样没变化……$result = strval($result); //将16进制的数字转换成字符串类型echo "result".$result."<br>"; for($i=0;$i<strlen($input);$i++){
echo ord($input[$i])+$magic_number."循环次数".$i."<br>"; if(ord($input[$i])+$magic_number>0xFF) //判断明文相应字符的10进制数加随机key是否大于255 (16进制就是0XFF)$magic_number = (ord($input[$i])+$magic_number - 0xFF)^(ord($FlashFXP_Key[$i%28])); //大于255就减去255 然后在和密匙的相应位置的数值xor计算
else
$magic_number = (ord($input[$i])+$magic_number)^(ord($FlashFXP_Key[$i%28])); //不大于255直接xor 密匙相应位置的数值if($magic_number>0x0F) //10进制的15
$result .= dechex($magic_number); //直接16进制
else
$result = $result."0".dechex($magic_number); //16进制后 补0 (并加上面的Key的16进制)
} $result = strtoupper($result); //全部转换大写字母
return $result;
} 这是一个PHP的函数源码,我想转换成 delphi的,但PHP的16进制和10进制转换和delphi 的不同,还有异或运算我也不熟悉,写出来的代码得不到想要的结果,请懂PHP的朋友帮忙转换一下,转成delphi的,多谢了
{
$FlashFXP_Key = "yA36zA48dEhfrvghGRg57h5UlDv3";
if($input=="") return "";
$key = rand(1,255);
//$key = 15; //调试用的echo "动态Key".$key."<br>"; //随机255的数
if($key >0x0F){ //10进制的15
$result = strtoupper(dechex($key)); //10进制转换成16进制并大写
}else{
$result = "0".strtoupper(dechex($key)); //不足15 10进制的15是字母F补0就是0F了并大写
} $magic_number = $key; echo "magic_number".$magic_number."<br>"; //返回值貌似和上面的随机Key一样没变化……$result = strval($result); //将16进制的数字转换成字符串类型echo "result".$result."<br>"; for($i=0;$i<strlen($input);$i++){
echo ord($input[$i])+$magic_number."循环次数".$i."<br>"; if(ord($input[$i])+$magic_number>0xFF) //判断明文相应字符的10进制数加随机key是否大于255 (16进制就是0XFF)$magic_number = (ord($input[$i])+$magic_number - 0xFF)^(ord($FlashFXP_Key[$i%28])); //大于255就减去255 然后在和密匙的相应位置的数值xor计算
else
$magic_number = (ord($input[$i])+$magic_number)^(ord($FlashFXP_Key[$i%28])); //不大于255直接xor 密匙相应位置的数值if($magic_number>0x0F) //10进制的15
$result .= dechex($magic_number); //直接16进制
else
$result = $result."0".dechex($magic_number); //16进制后 补0 (并加上面的Key的16进制)
} $result = strtoupper($result); //全部转换大写字母
return $result;
} 这是一个PHP的函数源码,我想转换成 delphi的,但PHP的16进制和10进制转换和delphi 的不同,还有异或运算我也不熟悉,写出来的代码得不到想要的结果,请懂PHP的朋友帮忙转换一下,转成delphi的,多谢了
解决方案 »
- 就是搞不明白--delphi类型
- 怎么在一个机器里面安装一个SOCKS的代理软件啊
- sql求救!!!!!!!!!!!!!!!!!!!!
- 急问数据库中的中文显示出来的是乱码,在线等!
- delphi ADOQuery if语句如何改正,只有三行,请达人指教,谢谢!
- StrToInt('$'+ copy(src,SrcPos,2))这个是什么意思
- ★★★100分求mmtools控件(带源代码),请各位大侠帮忙[email protected]
- 我是刚开始学习Delphi,我想了解一下,Delphi语言中,最重点的是那一部分?
- 马上回答,马上给分
- 菜鸟问题
- 怎么忽略AnsiString和string之间的警告啊?
- 用 webbrowser 浏览 163邮箱注册页面,而注册按钮点击不了!
var
FlashFXP_Key : string;
i,key,magic_number :Integer;
begin
FlashFXP_Key := 'yA36zA48dEhfrvghGRg57h5UlDv3';
if(input = '') then
begin
Result := '';
Exit;
end;
key := Random(255);
//下面的显示,你随便写
ShowMessage('动态Key'+IntToStr(key));
if(key >$F) then
begin
Result := Format('%x',[key]);
end
else
begin
Result := '0'+Format('%x',[key]); //不知道你的dechex是什么,如果是补0,format也可以实现,自己查吧
end; magic_number := key;
ShowMessage('magic_number'+IntToStr(magic_number));
for i:=0 to Length(input)-1 do
begin
ShowMessage('循环次数'+IntToStr(i));
if Ord(input[i])+magic_number > $FF then
begin
magic_number := (Ord(input[i])+magic_number - $FF) xor Ord(FlashFXP_Key[i mod 28]);
end
else
begin
magic_number := (Ord(input[i])+magic_number) xor Ord(FlashFXP_Key[i mod 28]);
end;
if magic_number > $0F then
Result := Format('%x',[magic_number])
else
Result := Result + '0'+ Format('%x',[magic_number]);
end;
Result := UpperCase(Result); //全部转换大写字母
end;
$result .= dechex($magic_number); //直接16进制
少看了个"."所以要改
Result := Format('%x',[magic_number])
为
Result := Result+Format('%x',[magic_number])
输出我也稍改了下,与原来完全一致,在D6上运行完全吻合注意,在D2007以上版本,要改String为AnsiString,并改所有"..."字串为AnsiString("...");
AnsiString
function encode(input:string):string;
var
FlashFXP_Key : string;
i,key,magic_number :Integer;
begin
FlashFXP_Key := 'yA36zA48dEhfrvghGRg57h5UlDv3';
if(input = '') then
begin
Result := '';
Exit;
end;
key := Random(255);
// key:=15;
//下面的显示,你随便写
ShowMessage('动态Key'+IntToStr(key));
if(key >$F) then
begin
Result := Format('%x',[key]);
end
else
begin
Result := '0'+Format('%x',[key]); //不知道你的dechex是什么,如果是补0,format也可以实现,自己查吧
end; magic_number := key;
ShowMessage('magic_number'+IntToHex(magic_number,2));
ShowMessage('result'+result+'<br>');
for i:=1 to Length(input) do
begin
ShowMessage(IntToStr(ord(input[i])+magic_number)+'循环次数'+IntToStr(i));
if Ord(input[i])+magic_number > $FF then
begin
magic_number := (Ord(input[i])+magic_number - $FF) xor Ord(FlashFXP_Key[i mod 28]);
end
else
begin
magic_number := (Ord(input[i])+magic_number) xor Ord(FlashFXP_Key[i mod 28]);
end;
if magic_number > $0F then
Result :=Result + Format('%x',[magic_number])
else
Result := Result + '0'+ Format('%x',[magic_number]);
end;
Result := UpperCase(Result); //全部转换大写字母
end;
if Ord(input[i])+magic_number > $FF then
begin
magic_number := (Ord(input[i])+magic_number - $FF) xor Ord(FlashFXP_Key[i mod 28]);
end
else
begin
magic_number := (Ord(input[i])+magic_number) xor Ord(FlashFXP_Key[i mod 28]);
end;