就这几行代码,搞的我一头雾水,哪位大侠懂PHP,帮忙改成D版本的,万分感谢!!!!!!!!!!!!function encrypt($str, $key = '123456')
{
    $coded = '';
    $keylength = strlen($key);    for ($i = 0, $count = strlen($str); $i < $count; $i += $keylength)
    {
        $coded .= substr($str, $i, $keylength) ^ $key;
    }    return str_replace('=', '', base64_encode($coded));
}

解决方案 »

  1.   

    你需要解决字符串异或的代码,其他都是基本的东西,$coded这都是变量,自己声明一下就行了,substr可以用pos,base64_encode这个编码函数delphi也有,具体名字记不清了
      

  2.   

    主要是看不懂PHP的代码啊  也不知道他是怎么替换的字符  哪位大侠写几行代码看看啊~~~~~~~~~
      

  3.   

    function TForm1.encrypt(str :string; key:string='123456'):string;
    var
      coded string;
      keylength :integer; 
      i :integer;
    begin
      Result := '';  coded :='';
      keylength := = strlen(key);
      i:=0;
      while i<keylength do
      begin
        coded := coded + midstr(str, i, keylength) ^ key;
        i:=i+keylength;
      end;
    end;
      

  4.   

    感谢楼上回复 不过貌似这句不对啊
    coded := coded + midstr(str, i, keylength) ^ key;
      

  5.   

    php可以异或字符串,delphi的不行,那边要改下
    coded + midstr(str, i, keylength)  xor  key;
      

  6.   

    function Encrypt(Str :string; Key :string = '123456') :string;
    var
      Coded :string;
      KeyLength,i :integer;
    begin
      Result :='';
      KeyLength := Length(Key);
      i :=0;
      while i<Length(Str) do
      begin
        Coded := Coded + (Copy(Str,i,KeyLength) xor Key); 
        i := i + KeyLength;
      end;
      Result := Replace(Base64_EnCode(Coded),'=',''); //Base64_Encode()在Delphi中没有现成的函数。
    end;
      

  7.   

    感谢楼上回复 不过这句我编译不了啊 有错误
    Coded := Coded + (Copy(Str,i,KeyLength) xor Key);
      

  8.   


    Delphi里面,字符串是不能直接异或的,需要将字符串里面的每一个字符Ord(),然后进行异或。
      

  9.   


    function encrypt(str:string;key:string='123456'):string;
    var
      code:string;
      xorresult,s:string;
      keylength:integer;
      i:integer;
      count:integer;
      j:integer;
    begin
      code:='';
      keylength:=Length(key);
      i:=1;
      count:=Length(str)+1;//为啥米要加1,难道因为i是从1开始计数的?;
      while (i<count) do
      begin
        if count-i<keylength then
          keylength:=count-i;
        setlength(xorresult,keylength);
        for j:=1 to keylength do
        begin
          s:=copy(str,i,keylength);
          xorresult[j]:=s[j];
          xorresult[j]:=chr(ord(xorresult[j]) xor ord(key[j]));
        end;
        code:=code+xorresult;
        i:=i+keylength;
      end;
      //EncodeString()函数来源于 encddecd 单元,用来将字符串编码为base64
      //DecodeString()函数用来解码
      result:=StringReplace(EncodeString(code),'=','',[rfReplaceAll, rfIgnoreCase]);
    end;
      

  10.   

    s:=copy(str,i,keylength);应该移到for循环之前,不应该在for循环里。
      

  11.   


    function encrypt(str: AnsiString; key: AnsiString = '123456'): AnsiString;
    var
    coded, sXOR, sOne: AnsiString;
    i, j, k, count, keylength: Integer;
    begin
      Result := '';
      coded := '';
      keylength := Length(key);
      count := Length(str);
      i := 1;
      if keylength <= 0 then
        Exit;  while (i <= count) do
      begin
        if i + keylength - 1 > count then
          keylength := count - i + 1;    sOne := Copy(str, i, keylength);
        sXOR := '';
        SetLength(sXOR, keylength);
        for j := 1 to keylength do
        begin
          sXOR[j] := sOne[j];
          sXOR[j] := AnsiChar(Ord(sXOR[j]) xor Ord(key[j]));
        end;
        coded := coded + sXOR;
        i := i + keylength;
      end;
      Result := StringReplace(EncodeString(coded), '=', '', [rfReplaceAll]); //EncodeString在EncdDecd单元中
    end;