Ir al contenido



Foto

Función C# a Delphi


  • Por favor identifícate para responder
11 respuestas en este tema

#1 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 585 mensajes
  • LocationCiudad de México

Escrito 09 abril 2015 - 04:56

Hola al grupo,

 

 

Tengo que convertir un código de C# a Delphi pero no tengo ni peregrina idea, la verdad es que jamás he tenido la "suerte" de trabajar con el hijo, solo con el padre.

 

Alguien que me pueda echar un cable?

 

Saludos! y gracias.


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.111 mensajes
  • LocationRepública Dominicana

Escrito 09 abril 2015 - 06:28

Pues "sin telecable no hay vida" :D
  • 1

#3 BDWONG

BDWONG

    Member

  • Miembros
  • PipPip
  • 21 mensajes

Escrito 11 abril 2015 - 11:20

Pues publica la funcion y te hechamos una mano


  • 0

#4 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 585 mensajes
  • LocationCiudad de México

Escrito 13 abril 2015 - 09:03

Gracias amigos,
 
esta es la función de marras:

 

------------------------------------


php
  1. int Decrypt(byte[] pSrc)
  2.         {
  3.             byte high,low;
  4.             byte c,d;
  5.             int i,j,len;
  6.             int count;
  7.             len = pSrc.Length;
  8.             if( len%2>0 )
  9.             {
  10.                 return -1;
  11.             }
  12.             i = 0;
  13.             count = 0;
  14.             for( j=0; j < len; j+=2)
  15.             {
  16.                 c = pSrc[j];
  17.                 d = pSrc[j+1];
  18.                 high = Convert.ToByte((c - 'x') > 0 ? (c - 'x') : 0);
  19.                 low = Convert.ToByte((d - 'z') > 0 ? (d - 'z') : 0);
  20.                 pSrc[i] = Convert.ToByte((high << 4) + low);
  21.                 if (pSrc[i] != 0)
  22.                     count++;
  23.                 i++;
  24.             }
  25.             pSrc[count] = 13;
  26.             return count;
  27.         }

---------------------------

Y así es como se llama:


php
  1.  while(src.Read(buffer,0,BUFMAXSIZE) > 0)
  2.             {
  3.  
  4.                 count = Decrypt(buffer);
  5.                 if (count < 30)
  6.                 {
  7.                     if (count < 1)
  8.                         continue;                   
  9.                 }
  10.                
  11.                 dst.Write(buffer, 0, count);
  12.                 buffer = new byte[256];
  13.             }

Agradezco la ayuda y saludos!!


  • 0

#5 seoane

seoane

    Advanced Member

  • Administrador
  • 1.215 mensajes
  • LocationEspaña

Escrito 13 abril 2015 - 09:57

No parece complicado, coge las letras de dos en dos y hace la siguiente operación:   ((primeraletra - 'x') * 16) + (segundaletra - 'x')  

 

De esta manera por cada dos caracteres de entrada obtiene un byte de resultado, por eso comprueba al principio que hay un numero par de letras.

 

Si puedes poner un ejemplo de texto cifrado y en claro, te podre decir mas


  • 0

#6 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 585 mensajes
  • LocationCiudad de México

Escrito 14 abril 2015 - 10:15

Seoane agradezco mucho la ayuda.

 

Este es el texto a descifrar:


php
  1. zzzzzzzz{{{|{z{{{z‡{z{}z‡{|{€zz{{{|{{z{}{{{{ƒxƒzzzz{{{zxƒzz{zxƒzzzzzzzz{{x‡x„

Saludos!!


  • 0

#7 seoane

seoane

    Advanced Member

  • Administrador
  • 1.215 mensajes
  • LocationEspaña

Escrito 14 abril 2015 - 04:15

Pues si que me lo has puesto dificil, porque en el texto que has puesto faltaba una letra. He tenido que hacer un poco de "criptoanalista" :p
 
En resumen, la funcion es esta:


delphi
  1. function Decrypt(Str: AnsiString): AnsiString;
  2. var
  3. i: Integer;
  4. b: byte;
  5. begin
  6. Result:= EmptyStr;
  7. // Si no es de una longitud par no hacemos nada
  8. if Odd(Length(Str)) then
  9. Exit;
  10. i:= 1;
  11. while i < Length(Str) do
  12. begin
  13. if Str[i] < 'x' then
  14. b:= 0
  15. else
  16. b:= byte(Str[i])-byte('x');
  17. b:= b shl 4;
  18. if Str[i+1] > 'z' then
  19. b:= b + byte(Str[i+1])-byte('z');
  20. Result:= Result + AnsiChar(b);
  21. inc(i,2);
  22. end;
  23. end;

La probamos de esta manera:


delphi
  1. Writeln(Decrypt('zzzzzzzz{{xƒ{|{z{{{zz‡{z{}z‡{|{€zz{{{|{„{z{}{„{{{ƒxƒzzzz{{xƒ{zxƒzz{zxƒzzzzzzzz{{x‡x„'));

Y nos da como resultado esto:


delphi
  1. 1 2010-03-26 12:03:19 1 0 0 1

Si te fijas la cadena que ponias tu tenia una 'z' de menos en el medio del texto, asi que al llegar a la mitad se me arruinaba todo :D
 
Saludos
  • 1

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.461 mensajes
  • LocationMéxico

Escrito 14 abril 2015 - 07:25

Caray, 

 

Mis respetos amigo Domingo, el que sabe sabe :)

 

Saludos


  • 0

#9 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 585 mensajes
  • LocationCiudad de México

Escrito 15 abril 2015 - 08:33

Hace unos meses platicando con E-Go acerca de una plática de un banco de pruebas entre Java, C#, Free pascal y Delphi, este me dijo: Dile a Seoane que te eche una mano, les va a poner una chinga.

 

No pos si, el que sabe sabe. Gracias mi estimado Seoane, probando, o más bien implementando.


  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.461 mensajes
  • LocationMéxico

Escrito 15 abril 2015 - 08:50

Hace unos meses platicando con E-Go acerca de una plática de un banco de pruebas entre Java, C#, Free pascal y Delphi, este me dijo: Dile a Seoane que te eche una mano, les va a poner una chinga.

 

No pos si, el que sabe sabe. Gracias mi estimado Seoane, probando, o más bien implementando.

 

 

Y no solo seaone, escafandra, cHackAll que son los Mr API's :D :D :D

 

saludos


  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.461 mensajes
  • LocationMéxico

Escrito 15 abril 2015 - 08:56

La verdad es que Yo tengo que agradecer a muchos compañeros que siempre han sido muy atentos cuando he requerido ayuda puntual con temas que escapan a mi entender.

 

En verdad muchas gracias amigos.  :ap:

 

Saludos


  • 1

#12 seoane

seoane

    Advanced Member

  • Administrador
  • 1.215 mensajes
  • LocationEspaña

Escrito 15 abril 2015 - 03:48

Me alegro de que te sirviese (b)


  • 0