Hola amigos,
Pues eso. Estoy usando las librerías del compañero Seoane que amablemente menciona en su blog. Pero tengo algunas dudas. Al querer usar las funciones de su artículo:
Cifrar texto con AES-256 pues me han aparecido errores en estas dos funciones:
AESEncryptStreamECB(Src,Dst,ExpandedKey);
AESDecryptStreamECB(Src,Dst,ExpandedKey);
Pues no existen según pude ver en la unidad AES de su libería. De ahí mi duda. ¿Esas funciones estan en alguna otra librería o se deben reescribir?
Saludos amigos,.

Dudas con el artículo de Seoane Cifrar texto con AES-256
Started by
poliburro
, Mar 16 2014 07:55 PM
3 replies to this topic
#1
Posted 16 March 2014 - 07:55 PM
#2
Posted 17 March 2014 - 04:16 AM
Caramba, ese articulo es del año 2007, en aquel momento todavía no había comenzado el proyecto SeCrypt y la unit "AES.pas" poco se parece a la unit "SeAES256.pas" actual.
Pero mira que casualidad, precisamente ayer subí una nueva versión de la librería a la que le añadí una nueva unit "SeEasyAES.pas" que simplifica muchisimo el proceso de cifrar/descifrar dejando que ella se preocupe del método de cifrado, generación de contraseña y vector de inicialización, nosotros solamente le tenemos que dar el texto y el password y el nos devuelve el texto cifrado, y viceversa.
Se pueden descargar de aquí (la ultima versión es la 0.4):
https://drive.google...OWM&usp=sharing
En ella encontraras un ejemplo como este (test03.dpr)
Como puedes ver todo se reduce a las funciones EasyAESEnc y EasyAESDec. Existen varias versiones de estas funciones que nos permiten trabajar con Strings (WideStrings en realidad), Streams o ficheros:
Espero que con estas funciones se simplifique mucho el uso de AES para aquellos en que el método de cifrado, tamaño de clave, etc ... les trae sin cuidado, y solo quieren cifrar algo.
Por cierto, las funciones generan un IV aleatorio por lo que si cifras el mismo texto en dos ocasiones la segunda vez da un resultado diferente de de la primera, aunque los dos devuelven el mismo texto al descifrar, es decir:
Saludos
Pero mira que casualidad, precisamente ayer subí una nueva versión de la librería a la que le añadí una nueva unit "SeEasyAES.pas" que simplifica muchisimo el proceso de cifrar/descifrar dejando que ella se preocupe del método de cifrado, generación de contraseña y vector de inicialización, nosotros solamente le tenemos que dar el texto y el password y el nos devuelve el texto cifrado, y viceversa.
Se pueden descargar de aquí (la ultima versión es la 0.4):
https://drive.google...OWM&usp=sharing
En ella encontraras un ejemplo como este (test03.dpr)
delphi
program test03; {$APPTYPE CONSOLE} uses SysUtils, SeAES256 in '..\SeCrypt\SeAES256.pas', SeBase64 in '..\SeCrypt\SeBase64.pas', SeEasyAES in '..\SeCrypt\SeEasyAES.pas', SeSHA256 in '..\SeCrypt\SeSHA256.pas', SeStreams in '..\SeCrypt\SeStreams.pas'; var i: Integer; Src, Cifrado: WideString; begin try Randomize; for i:= 1 to 1000 do Src:= Src + Chr(Random(1 + Ord('z') - Ord('A')) + Ord('A')); Writeln('=== Texto sin cifrar ==='); Writeln(Src); Writeln; Cifrado:= EasyAESEnc(Src,'Clave'); Writeln('=== Texto cifrado ==='); Writeln(Cifrado); Writeln; Cifrado:= EasyAESDec(Cifrado,'Clave'); Writeln('=== Texto descifrado ==='); Writeln(Cifrado); Writeln; Writeln('Resultado = ' + BoolToStr(Src = Cifrado,TRUE)); Writeln; except On E: Exception do Writeln(E.Message); end; Readln; end.
Como puedes ver todo se reduce a las funciones EasyAESEnc y EasyAESDec. Existen varias versiones de estas funciones que nos permiten trabajar con Strings (WideStrings en realidad), Streams o ficheros:
delphi
// Genera una "key" de 256 bits a partir de una cadena de texto procedure EasyGenKey(var Key: TAESKey; Password: WideString); // Streams procedure EasyAESEnc(Src, Dst: TStream; Password: WideString); overload; procedure EasyAESDec(Src, Dst: TStream; Password: WideString); overload; // Strings function EasyAESEnc(Str, Password: WideString): WideString; overload; function EasyAESDec(Str, Password: WideString): WideString; overload; // Ficheros procedure EasyAESEnc(SrcFile, DstFile, Password: WideString); overload; procedure EasyAESDec(SrcFile, DstFile, Password: WideString); overload;
Espero que con estas funciones se simplifique mucho el uso de AES para aquellos en que el método de cifrado, tamaño de clave, etc ... les trae sin cuidado, y solo quieren cifrar algo.
Por cierto, las funciones generan un IV aleatorio por lo que si cifras el mismo texto en dos ocasiones la segunda vez da un resultado diferente de de la primera, aunque los dos devuelven el mismo texto al descifrar, es decir:
delphi
// Lo siguiente siempre devuelve FALSE Writeln(BoolToStr(EasyAESEnc('Texto en claro','Clave')=EasyAESEnc('Texto en claro','Clave'),TRUE)); // Y lo siguiente siempre devuleve TRUE Writeln(BoolToStr(EasyAESDec(EasyAESEnc('Texto en claro','Clave'),'Clave')=EasyAESDec(EasyAESEnc('Texto en claro','Clave'),'Clave'),TRUE));
Saludos
#3
Posted 18 March 2014 - 09:01 AM
Je, me bajé la última versión de tu libería amigo pero por no revisar bien no encontré eso así que me puse a buscar en tu blog y encontré las funciones que me hacian falta y pude hacer funcionar el ejemplo.
Pero me actualizaré con al info que me has dado. Gracias por el trabajo que has hecho, me está siendo de mucha ayuda.
Pero me actualizaré con al info que me has dado. Gracias por el trabajo que has hecho, me está siendo de mucha ayuda.
#4
Posted 19 March 2014 - 03:49 AM
Gracias por el trabajo que has hecho, me está siendo de mucha ayuda.
Encantado de ayudar. Y si tienes alguna sugerencia o encuentras algún fallo no dudes en decírmelo