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;

这是一个加密函数,请求各位朋友帮忙写一个解密函数,小弟写了几天都不行,人快崩溃了

解决方案 »

  1.   

    可以解密的,这里其实就是异或运算,只是我刚开始学PHP,不会写出来,delphi有现在的代码
      

  2.   

    分也太少了,还好比较闲,要不坚决不帮你搞这体力活。
    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;
    }  
    ------
    试试看function decode($input)
    {
            $str            = strtolower($input);
            $FlashFXP_Key   = "yA36zA48dEhfrvghGRg57h5UlDv3";  
            $key            = hexdec(substr($str,0,2));
            for($i=2,$j=strlen($str),$k=0;$i<$j;$i+=2)
            {   
                    $hex = $str{$i}.$str{$i+1};
                    $nk  = hexdec($hex);
                    $t   = $nk ^ ord($FlashFXP_Key[$k++]);
                    $result.= ($t-$key > 0) ? chr($t-$key) : chr(0xFF + $t-$key);
                    $key = $nk;
            }   
            return $result;
    }
    $str = encode("sdfab1232XX你好");
    echo "加密:".$str."<br/>";
    echo "解密:".decode($str)."<br/>";
      

  3.   

    $k忘了%28,改改function decode($input)
    {
            $str            = strtolower($input);
            $FlashFXP_Key   = "yA36zA48dEhfrvghGRg57h5UlDv3";  
            $key            = hexdec(substr($str,0,2));
            $k              = 0;
            for($i=2,$j=strlen($str),$k=0;$i<$j;$i+=2)
            {
                    $hex = $str{$i}.$str{$i+1};
                    $nk  = hexdec($hex);
                    $t   = $nk ^ ord($FlashFXP_Key[$k % 28]);
                    $k++;
                    $result.= ($t-$key > 0) ? chr($t-$key) : chr(0xFF + $t-$key);
                    $key = $nk;
            }
            return $result;
    }
      

  4.   


    非常感谢这位大哥的帮忙,我刚开始学PHP,为了写这函数,搞了三天了,真心多谢你的热心帮忙。
      

  5.   

    其实我是需要把加密函数写在delphi里面的,这个代码自已慢慢研究了,一步步来吧,急也急不来