function UncrypKey(Src: string; Key: string): string;
var
  KeyLen: Integer;
  KeyPos: Integer;
  offset: Integer;
  dest: string;
  SrcPos: Integer;
  SrcAsc: Integer;
  TmpSrcAsc: Integer;
begin
  KeyLen := Length(Key);
  if KeyLen = 0 then
    key := 'FLDZ';
  KeyPos := 0;
  offset := StrToInt('$' + copy(src, 1, 2));
  SrcPos := 3;
  repeat
    SrcAsc := StrToIntDef('$' + copy(src, SrcPos, 2), 0);
    if KeyPos < KeyLen then
      KeyPos := KeyPos + 1
    else
      KeyPos := 1;
    TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
    if TmpSrcAsc <= offset then
      TmpSrcAsc := 255 + TmpSrcAsc - offset
    else
      TmpSrcAsc := TmpSrcAsc - offset;
    dest := dest + chr(TmpSrcAsc);
    offset := srcAsc;
    SrcPos := SrcPos + 2;
  until SrcPos >= Length(Src);
  Result := Dest;
end;

解决方案 »

  1.   

    注意几点就差不多了,string换位char数组
    length strlen
    copy  strncpy
    strtoint 这个方法很多可以自己去查,sscanf就可以
      

  2.   

    char* function( char* Src, char* Key )
    {
        int KeyLen;
        int KeyPos;
        int offset;
        char* dest;
        int SrcPos;
        int SrcAsc;
        int TmpSrcAsc;
        char tmp[1024]; /*自定义一个临时变量*/
        
    do
    {
        memset( tmp, 0x00, sizeof(tmp) );
        KeyLen = strlen(Key);
        if( Keylen == 0 )
        {
            strcpy( Key, "FLDZ" );
            KeyPos = 0;
            sprintf( tmp, "$%s", substr(src,1,2) );
            offset = (int)(tmp);
            SrcPos = 3;
        }
        SrcAsc = StrToIntDef(...) //这个怎么改
        if( KeyPos < KeyLen )
        {
            KeyPos = KePos + 1;
        }
        else
        {
            KeyPos = 1;
        }
        TmpSrcAsc = SrcAsc xor Ord(Key[KeyPos]);
        if( TmpSrcAsc <= offset )
        {
            TmpSrcAsc = 255 + TmpSrcAsc - offset
        }
        else
        {
            TmpSrcAsc = TmpSrcAsc - offset;
        }
        dest = dest + chr(TmpSrcAsc);
        offset = srcAsc;
        SrcPos = SrcPos + 2;
    }while( SrcPos >= strlen(Src) );
    Result = Dest;    
    }帮我看看还有错误吗
      

  3.   

    SrcAsc := StrToIntDef('$' + copy(src, SrcPos, 2), 0);

    sprintf( SrcAsc, "$%s", substr(src,SrcPos,2) ); 是一样的吗?
      

  4.   

    你呀,就不会将这个编写成DLL文件的接口程序吗,以方便所有软件编写的程序来
    调用吗,这样会更好的
    如编写软件:VB  VC DELPHI  C#等