Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Delphi - problemi di conversione di questa funzione
Forum - Delphi - problemi di conversione di questa funzione

Avatar
AxelMtE (Normal User)
Newbie


Messaggi: 2
Iscritto: 25/10/2013

Segnala al moderatore
Postato alle 0:09
Venerdė, 25/10/2013
Salve a tutti,
Questa č una funzione che esisteva nel set della Borland sulle funzioni di Encrypt e Crypt..
vorrei portarla in c#...
Ho provato a convertirla da solo ma credo di aver fatto degli errori o comunque non funziona...
Vi posto il codice prima In Delphi e poi in C#...se qualcuno fosse cosė gentile da aiutarmi...grazie in anticipo:)
Codice sorgente - presumibilmente Delphi

  1. Codice Sorgente in Delphi
  2. function Decrypt(hash: String; QIP: String = ''): String;
  3. var
  4. i: Byte;
  5. Chr,a,b,c: DWORD;
  6. begin
  7. Result:= '';
  8. if (QIP = '') then begin
  9. a:= $1AC3; b:= $38421; c:= $64CEB;
  10. end else begin
  11. a:= $1B5F; b:= $A8C3; c:= $3E9;
  12. for i:= 1 to Length(QIP) do c:= c + Ord(QIP[i]);
  13. end;
  14.  
  15. for i:= 1 to Length(hash) do begin
  16. Chr:= Ord(hash[i]);
  17. Result:= Result + Char(Byte(Chr xor Byte(a shr $8)));
  18. a:= ((a + Chr) * b) + c;
  19. end;
  20. end;



e questa č la mia...sigh 8-|...traduzione in c#
Codice sorgente - presumibilmente Delphi

  1. Codice sorgente in C#
  2.  private static string Decrypt(string hash, string QIP)
  3.         {
  4.            
  5.             string result = string.Empty;
  6.                
  7.                 byte i;
  8.                 uint a, b, c;
  9.                 if (QIP == "")
  10.                 {
  11.                     a = 6851; //1ac3
  12.                     b = 230433; // 38421
  13.                     c = 412907; // 64CEB
  14.                 }
  15.                 else
  16.                 {
  17.                     // $1B5F; b:= $A8C3; c:= $3E9;
  18.                     a = 7007;
  19.                     b = 43203;
  20.                     c = 1001;
  21.  
  22.                     for (i = 1; i < QIP.Length; )
  23.                     {
  24.                         c = c + (uint)QIP[i];
  25.                         i++;
  26.                     }
  27.                    
  28.                 }
  29.                
  30.                 for (i = 0; i < hash.Length; )
  31.                 {
  32.                     chr = chr + (uint)hash[i];
  33.                     i++;
  34.                 }
  35.                 Console.WriteLine((char)chr);
  36.                 result = result + (char)((byte)(chr ^ (byte)(a >> 8)));
  37.                 Console.WriteLine(result);
  38.                 a = ((a + chr) * b) + c;
  39.  
  40.                 return result;
  41.         }


Spero nell'aiuto di qualcuno...sono bloccato

Ultima modifica effettuata da AxelMtE il 25/10/2013 alle 0:11
PM Quote
Avatar
AxelMtE (Normal User)
Newbie


Messaggi: 2
Iscritto: 25/10/2013

Segnala al moderatore
Postato alle 0:12
Venerdė, 25/10/2013
Testo quotato

Postato originariamente da AxelMtE:

Salve a tutti,
Questa č una funzione che esisteva nel set della Borland sulle funzioni di Encrypt e Decrypt..
vorrei portarla in c#...
Ho provato a convertirla da solo ma credo di aver fatto degli errori o comunque non funziona...
Vi posto il codice prima In Delphi e poi in C#...se qualcuno fosse cosė gentile da aiutarmi...grazie in anticipo:)
Codice sorgente - presumibilmente Delphi

  1. Codice Sorgente in Delphi
  2. function Decrypt(hash: String; QIP: String = ''): String;
  3. var
  4. i: Byte;
  5. Chr,a,b,c: DWORD;
  6. begin
  7. Result:= '';
  8. if (QIP = '') then begin
  9. a:= $1AC3; b:= $38421; c:= $64CEB;
  10. end else begin
  11. a:= $1B5F; b:= $A8C3; c:= $3E9;
  12. for i:= 1 to Length(QIP) do c:= c + Ord(QIP[i]);
  13. end;
  14.  
  15. for i:= 1 to Length(hash) do begin
  16. Chr:= Ord(hash[i]);
  17. Result:= Result + Char(Byte(Chr xor Byte(a shr $8)));
  18. a:= ((a + Chr) * b) + c;
  19. end;
  20. end;



e questa č la mia...sigh 8-|...traduzione in c#
Codice sorgente - presumibilmente Delphi

  1. Codice sorgente in C#
  2.  private static string Decrypt(string hash, string QIP)
  3.         {
  4.            
  5.             string result = string.Empty;
  6.                
  7.                 byte i;
  8.                 uint a, b, c;
  9.                 if (QIP == "")
  10.                 {
  11.                     a = 6851; //1ac3
  12.                     b = 230433; // 38421
  13.                     c = 412907; // 64CEB
  14.                 }
  15.                 else
  16.                 {
  17.                     // $1B5F; b:= $A8C3; c:= $3E9;
  18.                     a = 7007;
  19.                     b = 43203;
  20.                     c = 1001;
  21.  
  22.                     for (i = 1; i < QIP.Length; )
  23.                     {
  24.                         c = c + (uint)QIP[i];
  25.                         i++;
  26.                     }
  27.                    
  28.                 }
  29.                
  30.                 for (i = 0; i < hash.Length; )
  31.                 {
  32.                     chr = chr + (uint)hash[i];
  33.                     i++;
  34.                 }
  35.                 Console.WriteLine((char)chr);
  36.                 result = result + (char)((byte)(chr ^ (byte)(a >> 8)));
  37.                 Console.WriteLine(result);
  38.                 a = ((a + chr) * b) + c;
  39.  
  40.                 return result;
  41.         }


Spero nell'aiuto di qualcuno...sono bloccato


PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 21:47
Domenica, 27/10/2013
Controlla l'ultimo coclo for:

Codice sorgente - presumibilmente Plain Text

  1. Chr:= Ord(hash[i]);



non credo venga tradotto bene con

Codice sorgente - presumibilmente Plain Text

  1. chr = chr + (uint)hash[i];



e poi, sempre in quel ciclo l'istruzione

Codice sorgente - presumibilmente Plain Text

  1. i++;



č sicuramente sbagliata (sicuro di conoscere BENE come funziona il ciclo for?)

infine, non conosco il tipo unit del C#, ma in ogni caso, dubito che l'istruzione

Ord(XXXX)

di Delphi venga tradotta bene con un semplice cast di tipo

(unit)XXXX

Ciao. :k:

PM Quote