AES-128 en XE5
#1
Escrito 11 marzo 2014 - 05:44
Muchas gracias
Saludos
Jesus
#2
Escrito 11 marzo 2014 - 06:28
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
#3
Escrito 11 marzo 2014 - 06:42
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
#4
Escrito 11 marzo 2014 - 06:44
Saludos
Jesus
#5
Escrito 11 marzo 2014 - 09:36
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?
#6
Escrito 11 marzo 2014 - 09:55
Saludos
Jesus
#7
Escrito 11 marzo 2014 - 10:24
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.
#8
Escrito 11 marzo 2014 - 10:35
Gracias
Saludos
Jesus
#9
Escrito 11 marzo 2014 - 11:18
uses SysUtils, SeAES256 in 'SeAES256.pas'; var Trama: array[0..50] of Byte; // Ojo!, son 51 bytes Buffer: PByteArray; i, Count: Integer; Key: TAESKey; ExpandedKey: TAESExpandedKey; P: PAESState; begin // Aqui llenas la trama como quieras Trama[0]:= 1; Trama[2]:= 2; // etc ... Trama[50]:= 50; // Si la clave es: // 2b7e151628aed2a6abf7158809cf4f3c; // prueba con esto a ver si te funciona en XE5 AESCopyKey(Key,PAnsiChar(AnsiString(#$2b#$7e#$15#$16#$28#$ae#$d2#$a6#$ab#$f7#$15#$88#$09#$cf#$4f#$3c)),128); // Si no te funciona tendras que usar algo como esto Key[0]:= $2b7e1516; Key[1]:= $28aed2a6; Key[2]:= $abf71588; Key[3]:= $09cf4f3c; Key[4]:= 0; Key[5]:= 0; Key[6]:= 0; Key[7]:= 0; // fin del metodo alternativo // Calculamos el numero de bloques necesarios Count:= Sizeof(Trama) div Sizeof(TAESState); if Sizeof(Trama) mod Sizeof(TAESState) > 0 then inc(Count); // Reservamos memoria GetMem(Buffer,Count * Sizeof(TAESState)); try // Rellenamos con cero todos los bloques FillChar(Buffer^,Count * Sizeof(TAESState),0); // Movemos la trama a los bloques que hemos reservado Move(Trama,Buffer^,SizeOf(Trama)); // Expandimos la clave AESExpandKey(ExpandedKey,Key,128); P:= PAESState(Buffer); // Bloque a bloque ... for i:= 0 to Count-1 do begin // ... los vamos cifrando AESEncrypt(P^,ExpandedKey); inc(P); end; // En este punto ya tenemos los datos cifrados, haz con ellos lo que quieras Writeln; for i:= 0 to (Count * SizeOf(TAESState)) - 1 do Write(IntToHex(Buffer[i],2)); finally FreeMem(Buffer); end; readln; 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
#10
Escrito 11 marzo 2014 - 11:41
Saludos
Jesus
#11
Escrito 11 marzo 2014 - 07:59
Me da un Runtime Error. He probado con las dos maneras que me dices de copiar la Key pero no va.
Gracias
Saludos
Jesus
#12
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
#13
Escrito 12 marzo 2014 - 03:17
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
#14
Escrito 12 marzo 2014 - 04:05
Saludos
Jesus
#15
Escrito 12 marzo 2014 - 04:24
Muchisimas gracias de nuevo
Saludos
Jesus
#16
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
#17
Escrito 12 marzo 2014 - 06:35
Saludos
Jesus
#18
Escrito 22 abril 2014 - 08:25
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
#19
Escrito 22 abril 2014 - 10:14
#20
Escrito 22 abril 2014 - 11:33
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