Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-10-2012
Comandant Comandant is offline
Miembro
 
Registrado: ago 2012
Ubicación: Salta
Posts: 34
Poder: 0
Comandant Va por buen camino
Alguien sabe utilizar las nuevas librerias de cifrado del Ing. Seaone?

Hola como dice el titulo alguien a utilizado las nuevas librerías de cifrado AES de el Ing Seaone en delphi XE porque no he podido cifrar un texto de mas de 16 caracteres porque el State es de 16 bits? alguien sabe como aumentar su capacidad o que se dinámico o no se puede? despues quize usar los stream pero me quede en el Create y no entendí bien como leer y escribir. Disculpen mi ignorancia pero quisiera entender como se usan ya que se que son muy conocidas por aquí.

http://code.google.com/p/secrypt/
Código Delphi [-]
uses SeAES256, SeBase64, SeSHA256, SeStreams;
procedure TForm1.Button1Click(Sender: TObject)
var
   Key: AnsiString;
   PlainText: AnsiString;
   AESKey: TAESKey;
   ExpandedKey: TAESExpandedKey;
   State: TAESState;
 begin
   // Clave de 32 bytes de longitud
   Key:= '12345678901234567890123456789012';
   {  #$60#$3d#$eb#$10#$15#$ca#$71#$be#$2b#$73#$ae#$f0#$85#$7d#$77#$81 +
     #$1f#$35#$2c#$07#$3b#$61#$08#$d7#$2d#$98#$10#$a3#$09#$14#$df#$f4;}
   // Texto plano de 16 bytes de longitud
   PlainText:=
     'No puedo meter mas de 16 caracteres';
   AESCopyKey(AESKey,PAnsiChar(Key));
   AESExpandKey(ExpandedKey,AESKey);
   move(PAnsiChar(PlainText)^,State,Sizeof(State));
   AESEncrypt(State,ExpandedKey);
   memo1.Lines.Add(Copy(PAnsiChar(@State),1,Sizeof(State)));
   AESDecrypt(State,ExpandedKey);
   memo2.Lines.Add( 'Bloque = ' + Copy(PAnsiChar(@State),1,Sizeof(State)));
end;

Código Delphi [-]
// Prepara la clave
function CalcularClave(Clave: AnsiString): TAESExpandedKey;
var
  Key: TAESKey;
begin
  // Usamos como Key el hash SHA256 de la Clave
  TSHA256HASH(Key):= CalcSHA256(Clave);
  AEsExpandKey(Result,Key);
end;
 
function Cifrar(Str: AnsiString; Clave: TAESExpandedKey): String;
var
  Dst: TStringStream;
  AStream: TAESEnc;
  BStream: TBase64Enc;
begin
  Dst:= TStringStream.Create(EmptyStr);
  try
    BStream:= TBase64Enc.Create(Dst);
    AStream:= TAESEnc.Create(BStream,Clave);
    try
     AStream.Write(PAnsiChar(Str)^,Length(Str));
    finally
      AStream.Free;
      BStream.Free;
    end;
    Result:= Dst.DataString;
  finally
    Dst.Free;
  end;
end;
 
function Descifrar(Str: AnsiString; Clave: TAESExpandedKey): String;
var
  Dst: TStringStream;
  AStream: TAESDec;
  BStream: TBase64Dec;
begin
  Dst:= TStringStream.Create(EmptyStr);
  try
    AStream:= TAESDec.Create(Dst,Clave);
    BStream:= TBase64Dec.Create(AStream);
    try
     BStream.Write(PAnsiChar(Str)^,Length(Str));
    finally
      BStream.Free;
      AStream.Free;
    end;
    Result:= Dst.DataString;
  finally
    Dst.Free;
  end;
end;

ahi estan los ejemplos pero que no he podido resolverlos, se que la mejor persona es Seaone para que me responda pero es mejor por foro para que quede archivado que no?. Gracias manes
Responder Con Cita
  #2  
Antiguo 29-10-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 14
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Comandant,

Revisa estos links:
Adicionalmente puedes usar CrypTool 1.4.30 el cual es un programa que te permitirá entender de forma gráfica como funciona el algoritmo AES.

Descarga la versión CrypTool 1.4.30 de este link http://www.cryptool.org/en/ct1-download-en, y después de instalarlo sigue la siguiente ruta de opciones de menú: Indiv. Procedures -> Visualization of Algorithms -> AES -> Rijndael Animation, esto te mostrara una animación en flash del funcionamiento de AES.

En el link http://delphi.jmrds.com/?q=node/44, tienes todo lo que necesitas para implementar AES 256 en Delphi, solo tienes que añadir el código a tu proyecto : Unidades AES.pas, Base64.pas y las funciones Cifrar y Descifrar que usan dichas unidades, todo esta en el link.

Si no quieres depender de la API crypt32.dll de Windows usada en la Unidad Base64.pas, revisa estos links:
http://delphi.jmrds.com/?q=node/83
http://delphi.jmrds.com/?q=node/84

Espero sea útil

Nelson

Última edición por nlsgarcia fecha: 29-10-2012 a las 04:15:44.
Responder Con Cita
  #3  
Antiguo 29-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 27.654
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Comandant Ver Mensaje
ahi estan los ejemplos pero que no he podido resolverlos, se que la mejor persona es Seaone para que me responda pero es mejor por foro para que quede archivado que no?. Gracias manes
Mira en su web, y de paso puedes preguntarle personalmente, aunque creo que con los ejemplos que ha puesto deberías poder solucionar tu problema.
Responder Con Cita
  #4  
Antiguo 29-10-2012
Comandant Comandant is offline
Miembro
 
Registrado: ago 2012
Ubicación: Salta
Posts: 34
Poder: 0
Comandant Va por buen camino
Ok gracias manes, bien si he visitado la pagina y he entendido la libreria AES y BASE64, lo k pasa k no trabajan cn UNICODE y x lo tanto en delphi 7 anda perfectament, pero tengo Delphi XE y lo mas cercano a cifrar fue x las nuevas librerias
queria saber si alguien tiene exp cn el uso d las nuevas librerias k de las "viejas"
escuche k en vez de pasarlo a string lo pase a hexa para usar las antiguas lib
Les agradezco por su atencion y por sobre todo su tiempo Grax
Responder Con Cita
  #5  
Antiguo 29-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 27.654
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, sigue las normas indicadas en nuestra guía de estilo, gracias.
Una de ellas, como podrás ver, es "escribir bien", no tienes que pagar por palabras (como con los teléfonos móviles), así que no recortes y dedica tiempo en explicar las cosas correctamente y lo más amplio posible. Gracias.

Última edición por Casimiro Notevi fecha: 29-10-2012 a las 16:25:27.
Responder Con Cita
  #6  
Antiguo 29-10-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 14
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Comandant,

Revisa estos comentarios en el siguiente link: http://delphi.jmrds.com/?q=node/43
Cita:
Estoy teniendo algunos problemas al usar el sistema de CryptBinaryToString en Delphi 2010, no se si el problema vendrá ocasionado
por el nuevo IDE. ¿Podrías informarme de si tienes algún tipo de información en este tipo de sistema?

Gracias por anticipado.

Saludos.

Víctor.
Cita:
Esa versión de Delphi utiliza caracteres unicode por defecto, así que el tamaño en bytes de los caracteres es diferente.
No tengo Delphi 2010 para probarlo pero prueba a cambiar el tipo String por AnsiString y PChar por PAnsiChar.

Con eso debería funcionar, pruebalo y nos lo cuentas.
Revisa estos comentarios en el siguiente link: http://delphi.jmrds.com/?q=node/83
Cita:
Excelente artículo!!!

sin embargo me quedo con la duda de cómo funciona para strings unicode?

Un saludo seoane, desde el otro lado del charco
Código Delphi [-]
Pues no te quedes con la duda jachguate, funciona perfectamente.

Solamente hay que saber como utilizar las funciones, por ejemplo:

procedure TestWideStrings;
var
  l: Integer;
  Str: WideString;
  P: PWideChar;
begin
  Str:= '这样还经营';
  MessageBoxW(0,PWideChar('Texto original: ' + Str),'Test',
    MB_OK or MB_SETFOREGROUND or MB_TASKMODAL);
  Str:= BinToStr(PByteArray(PWideChar(Str)),Length(Str)*Sizeof(WideChar));
  MessageBoxW(0,PWideChar('Texto codificado: ' + Str),'Test',
    MB_OK or MB_SETFOREGROUND or MB_TASKMODAL);
  P:= PWideChar(StrToBin(Str,l));
  try
    Str:= Copy(P,1,l div Sizeof(WideChar));
  finally
    // Siempre hay que acordarse de liberar la memoria
    FreeMem(P);
  end;
  MessageBoxW(0,PWideChar('Texto reconstruido: ' + Str),'Test',
    MB_OK or MB_SETFOREGROUND or MB_TASKMODAL);
end;

En el ejemplo tenemos un texto en chino que guardamos en un WideString.
Para codificarlo no hay mas que pasar su puntero a la función BinToStr, pero teniendo en cuenta
que su tamaño en bytes es el doble que su tamaño en caracteres. Y decodificarlo es todavía mas fácil,
ya que el parámetro "Str" que le pasamos a la función StrToBin es del tipo AnsiString por lo que
delphi ya hace la conversión por nosotros.

Como ves tanto a la hora de codificar como decodificar no hay problemas con las strings Unicode

Saludos
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 29-10-2012 a las 16:21:40.
Responder Con Cita
  #7  
Antiguo 29-10-2012
Comandant Comandant is offline
Miembro
 
Registrado: ago 2012
Ubicación: Salta
Posts: 34
Poder: 0
Comandant Va por buen camino
Ok jaja perdon pasa que te respondi desde el movil y es la costumbre xD
Responder Con Cita
  #8  
Antiguo 29-10-2012
Comandant Comandant is offline
Miembro
 
Registrado: ago 2012
Ubicación: Salta
Posts: 34
Poder: 0
Comandant Va por buen camino
Ha y muchas gracias Goku gg
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Begin ... End.... sabe alguien..? itsi OOP 10 11-05-2007 20:13:10
transacciones en cs - alguien sabe? pmfras Conexión con bases de datos 3 11-12-2006 19:26:05
alguien sabe utilizar el TMsnPopUp Rabata Varios 0 08-03-2005 13:48:26
Alguien sabe??? diegofhernando Varios 8 19-07-2004 20:09:59
Alguien sabe que es SAP? Combat-F2D Varios 3 02-05-2004 20:31:33


La franja horaria es GMT +2. Ahora son las 06:41:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi