Ir al contenido


Foto

AES-128 en XE5


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

#1 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 11 marzo 2014 - 05:44

Hola. Sabesis de algun componente gratuito para encriptar y desencriptar en AES-128 para XE5?.....He estado buscando y solo he encontrado el delphidec.....

Muchas gracias
Saludos

Jesus

  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 11 marzo 2014 - 06:28

Prueba con este:
http://code.google.com/p/secrypt/

Recientemente le he añadido la opción de usar 128 y 192 bits ademas de los 256 bits que usaba hasta ahora.

¿Que quieres cifrar? ¿texto, ficheros, ...? ¿en que formato tienes la clave? ¿vas a usar ECB o CBC? si das mas detalles te puedo echar una mano
  • 0

#3 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 11 marzo 2014 - 06:42

Hola,
Muchas gracias Seoane. Quiero encriptar cadenas de 32/48 bytes . Buscando he visto tu rutina de AES.  Sirve para Xe5 (Unicode)?.

Gracias otra vez
Saludos

Jesus

  • 0

#4 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 11 marzo 2014 - 06:44

Hola de nuevo Seoane......se me olvidaba..en ECB.

Saludos
Jesus
  • 0

#5 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 11 marzo 2014 - 09:36

El problema de AES (y de cualquier cifrado en bloques) es que el tamaño del texto cifrado siempre es un múltiplo del tamaño del bloque (16 bytes para AES), por eso se tiene que pensar una manera de conocer mas tarde el tamaño del texto original. Se puede hacer de varias formas: guardando el tamaño por separado, utilizando ceros para rellenar el ultimo bloque (en el caso de textos ANSI), etc ..

En este punto me gustaría saber si los textos cifrados los vas a compartir con otro programa, o una tercera persona, porque entonces tendrás que amoldarte a la forma que tenga el de hacerlo. Si por el contrario tienes libertad para diseñar tu propio método, la cosa es muy sencilla.

Si el texto es ANSI, Unicode o utf8 es irrelevante si el método lo puedes escoger tu. Si por el contrario el método lo elige otro ya tendríamos que estudiarlo mejor.

Resumiendo ¿Te tienes que amoldar a un protocolo en concreto o puedes decidir tu el formato?
  • 0

#6 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 11 marzo 2014 - 09:55

Hola Seoane, gracias por responder. Tengo un protocolo muy bien definido por una tercera persona. En dicho protocolo se definen los bytes que se usan de la trama y los que no se usan se rellenan con ceros. Las tramas a encriptar son como maximo de 50 bytes obteniendo pues tramas encriptadas de 48 bytes (= 16 * 3) como maximo. El dispositivo al cual le envio esta trama encriptada es quien tiene que comprender la trama y si la comprende y ve todos los bytes (despues de desencriptar con la misma key) correctos enviara su asentimiento (ACK). El potocolo incluye cabeceras no encriptadas para dicha trama donde se controla la longitud de la trama, checksum, etc, asi que no creo que debe haber problemas....

Saludos
Jesus
  • 0

#7 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 11 marzo 2014 - 10:24

Una pregunta, ese "dispositivo" espera recibir el texto en unicode (dos bytes por carácter), en utf8 o en ANSI, porque se me hace raro que un aparato que no sea un ordenador trabaje con caracteres no ANSI.

De todas formas no tengo un delphi XE5 para probar pero si no me equivoco utiliza strings del tipo WideString en vez de AnsiString como en versiones anteriores de delphi. Si me lo confirmas te digo como hacerlo con WideStrings.

Por otro lado asegurate que el dispositivo no espera caracteres ansi, porque entonces seria tan sencillo como usar strings del tipo AnisString que tambien las puede manejar el XE5.
  • 0

#8 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 11 marzo 2014 - 10:35

Hola Seoane,.. El dispositivo espera recibir bytes (8 bits), nada de Widestring ni nada por el estilo. La idea es crear una trama:[0..50] of Byte, poner en cada byte lo que le corresponde, encriptar, poner la cabecera y a mandarlo. Habria problema en hacer esto con tu rutina?.

Gracias
Saludos

Jesus


  • 0

#9 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 11 marzo 2014 - 11:18

Pues aquí tienes un ejemplo:


delphi
  1. uses
  2.   SysUtils,
  3.   SeAES256 in 'SeAES256.pas';
  4.  
  5. var
  6.   Trama: array[0..50] of Byte;  // Ojo!, son 51 bytes
  7.   Buffer: PByteArray;
  8.   i, Count: Integer;
  9.   Key: TAESKey;
  10.   ExpandedKey: TAESExpandedKey;
  11.   P: PAESState;
  12. begin
  13.   // Aqui llenas la trama como quieras
  14.   Trama[0]:= 1;
  15.   Trama[2]:= 2;
  16.   // etc ... 
  17.   Trama[50]:= 50;
  18.  
  19.   // Si la clave es:
  20.   // 2b7e151628aed2a6abf7158809cf4f3c;
  21.   // prueba con esto a ver si te funciona en XE5
  22.   AESCopyKey(Key,PAnsiChar(AnsiString(#$2b#$7e#$15#$16#$28#$ae#$d2#$a6#$ab#$f7#$15#$88#$09#$cf#$4f#$3c)),128);
  23.   // Si no te funciona tendras que usar algo como esto
  24.   Key[0]:= $2b7e1516;
  25.   Key[1]:= $28aed2a6;
  26.   Key[2]:= $abf71588;
  27.   Key[3]:= $09cf4f3c;
  28.   Key[4]:= 0;
  29.   Key[5]:= 0;
  30.   Key[6]:= 0;
  31.   Key[7]:= 0;
  32.   // fin del metodo alternativo
  33.  
  34.   // Calculamos el numero de bloques necesarios
  35.   Count:= Sizeof(Trama) div Sizeof(TAESState);
  36.   if Sizeof(Trama) mod Sizeof(TAESState) > 0 then
  37.     inc(Count);
  38.   // Reservamos memoria
  39.   GetMem(Buffer,Count * Sizeof(TAESState));
  40.   try
  41.     // Rellenamos con cero todos los bloques
  42.     FillChar(Buffer^,Count * Sizeof(TAESState),0);
  43.     // Movemos la trama a los bloques que hemos reservado
  44.     Move(Trama,Buffer^,SizeOf(Trama));
  45.     // Expandimos la clave
  46.     AESExpandKey(ExpandedKey,Key,128);
  47.     P:= PAESState(Buffer);
  48.     // Bloque a bloque ...
  49.     for i:= 0 to Count-1 do
  50.     begin
  51.       // ... los vamos cifrando
  52.       AESEncrypt(P^,ExpandedKey);
  53.       inc(P);
  54.     end;
  55.     // En este punto ya tenemos los datos cifrados, haz con ellos lo que quieras
  56.     Writeln;
  57.     for i:= 0 to (Count * SizeOf(TAESState)) - 1 do
  58.       Write(IntToHex(Buffer[i],2));
  59.   finally
  60.     FreeMem(Buffer);
  61.   end;
  62.  
  63.   readln;
  64. end.



La "trama" la he representado como un array de 0..50. Para cargar la clave te doy dos métodos diferentes, depende de en que formato la tengas tendrás que usar uno u otro.

Échale un vistazo y si tienes alguna duda pregúntamela





  • 0

#10 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 11 marzo 2014 - 11:41

Muchisimas gracias Seoane. Ya te contare.

Saludos
Jesus


  • 0

#11 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 11 marzo 2014 - 07:59

Hola Seoane,
    Me da un Runtime Error. He probado con las dos maneras que me dices de copiar la Key pero no va.

Gracias
Saludos
Jesus
  • 0

#12 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 12 marzo 2014 - 01:19

    Me da un Runtime Error. He probado con las dos maneras que me dices de copiar la Key pero no va.


¿Que error te da exactamente y donde? ... y algo de código no estaría mal
  • 0

#13 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 12 marzo 2014 - 03:17

Hola Seoane,
  He puesto tu codigo tal cual, si nada mas. Al iniciar se ha quedado colgado y sale una ventanita pequeña donde pone "Runtime error 29010" (El numero no me acuerdo bien). Se te ocurre de que puede ser?

Gracias
Saludos

Jesus


  • 0

#14 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 12 marzo 2014 - 04:05

Hola Seoane. He probado el Test01 que viene con Secrypt y va perfectamente.

Saludos
Jesus
  • 0

#15 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 12 marzo 2014 - 04:24

Seoane. He quitado el codigo de test01 y he puesto el nuevo que pusiste aqui y va todo bien,..debi hacer algo mal yo.

Muchisimas gracias de nuevo
Saludos

Jesus


  • 0

#16 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 12 marzo 2014 - 06:20

Seoane. He quitado el codigo de test01 y he puesto el nuevo que pusiste aqui y va todo bien,..debi hacer algo mal yo.


Entiendo que ahora te va bien. ¿lo probaste contra el dispositivo? ... lo pregunto por curiosidad  :)

Si al probarlo contra el dispositivo no te va, seria interesante que consiguieras del fabricante o del manual de instrucciones un ejemplo donde se puedan ver los datos antes y después de cifrar, así podríamos afinar mucho más.

Saludos

PD: Ahora mismo estaba instalando una versión "Trial" de 30 días del XE5, es todo lo que me puedo permitir con los precios de embarcadero  :(
  • 0

#17 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 12 marzo 2014 - 06:35

Hola Seoane. Todavia no lo he probado con el dispositivo, cuando lo haga te digo algo.....La version "guay" del XE5 ...;-)... va bien en W7 64 bits que es donde lo tengo yo instalado. A ver si esto que estoy haciendo genera un poco de dinero y me hago con la oficial.

Saludos
Jesus



  • 0

#18 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 22 abril 2014 - 08:25

Hola Seoane.
  Ya estoy haciendo pruebas y va de cine. Ahora tengo que desencriptar, he probado a utilizar la rutina que pusiste aqui pero cambiando AESencrypt por AESdecrypt pero no lo hace bien, ..te importaria hecharme una mano?... Muchas gracias. Saludos

Jesus



  • 0

#19 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 22 abril 2014 - 10:14

¿Que error te da? ¿Puedes poner el código?  ¿y un ejemplo de la cadena cifrada y sin cifrar?
  • 0

#20 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 22 abril 2014 - 11:33

Hola Seoane.
  Gracias por contestar. Disculpame. Esta todo bien. Revisandolo vi que habia puesto la cadena de entrada a cero a piñon para pruebas. Con el miedo en el cuerpo lo primero que hice fue poner el mensaje aqui.

Gracias de nuevo
Saludos

Jesus


  • 0




IP.Board spam blocked by CleanTalk.