Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por mamu
Interesante tema. Yo me pregunto, si es correcto el uso de funciones logicas en cualquier algoritmo de encriptacion o es lo mas habitual. Es una duda que tengo.
¿A que te refieres con funciones lógicas? Si lo dices por la función XOR, si que es de lo mas habitual. No entiendo por que no te parece adecuado utilizarlas.

De todas formas, el algoritmo AES es el usado por el gobierno de los EEUU, es ampliamente conocido, estudiado y probado, así que no hay porque dudar de su eficacia.
Responder Con Cita
  #2  
Antiguo 25-07-2007
adfa adfa is offline
Miembro
 
Registrado: may 2003
Ubicación: Montevideo-Uruguay
Posts: 119
Poder: 22
adfa Va por buen camino
Yo uso el componente TCipherManager aunque nunca use ese algoritmo, este componente trae varios algoritmos entre ello el AES (lo llama Rijndael).
Noto que tiene algunas diferencias en las constantes, pero no tengo los suficientes conocimientos para ver si en definitiva es lo mismo
Despues voy a probarlos a ver si son compatibles.

Saludos
Responder Con Cita
  #3  
Antiguo 07-11-2007
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Post Consulta!

Buenos días:

Revivo este hilo para saber si es posible usar esta implementación para poder encriptar y desencriptar cadenas de texto string. Hay multiples componentes que lo hacen, pero la idea es usar esta unit que ha implementado domingo, simple y concreta y sin necesidad de utilizar grandes paquetes de componentes.

Muchas Gracias!!!!
__________________
Saludos.

Marcelo D. Alegre
Responder Con Cita
  #4  
Antiguo 08-11-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por kanvictor Ver Mensaje
Revivo este hilo para saber si es posible usar esta implementación para poder encriptar y desencriptar cadenas de texto string.
Pues a primera vista no veo porque no, fíjate que la función admite como parámetros dos streams (Source y Dest), estos pueden ser por ejemplo un TStringStream y un TMemoryStream. El único problema que veo es que la información cifrada (la de stream Dest) no se puede representar como texto. Pero si te das una vueltita por mi pagina encontraras una función que permite codificar un stream a base64, devolviendo una cadena de texto.

En resumen, el proceso seria el siguiente:

-- Para cifrar --
- Cargar el texto en un TStringStream
- Cifrarlo, quedando el resultado en un TMemoryStream
- Codificar el TMemoryStream a base64

-- Para descifrar --
- Descodificar el texto en base64, quedando el resultado en un TMemoryStream
- Descifrarlo, quedando el resultado en un TStringStream
- Obtener el texto en claro del TStreamStream.

No lo he probado, pero debería de funcionar

Algunos links
http://delphi.jmrds.com/?q=node/43
http://delphi.jmrds.com/?q=node/31
Responder Con Cita
  #5  
Antiguo 08-11-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Y para que no digais que falta el codigo, y aunque ando un poco apurado ...

Código Delphi [-]
uses AES, Base64;

function Cifrar(Str,Clave: String): String;
var
  Src: TStringStream;
  Dst: TMemoryStream;
  Size: Integer;
  Key: TAESKey;
  ExpandedKey: TAESExpandedKey;
begin
  Result:= EmptyStr;
  Src:= TStringStream.Create(Str);
  try
    Dst:= TMemoryStream.Create;
    try
      FillChar(Key,Sizeof(Key),#0);
      if Length(Clave) > Sizeof(Key) then
        move(PChar(Clave)^,Key,Sizeof(key))
      else
        move(PChar(Clave)^,Key,Length(Clave));
      AEsExpandKey(ExpandedKey,Key);
      // Guardamos el tamaño del archivo
      Size:= Src.Size;
      Dst.WriteBuffer(Size,Sizeof(Size));
      AESEncryptStreamECB(Src,Dst,ExpandedKey);
      Result:= BinToStr(Dst.Memory,Dst.Size);
    finally
      Dst.Free;
    end;
  finally
    Src.Free;
  end;
end;

function Descifrar(Str,Clave: String): String;
var
  Src: TMemoryStream;
  Dst: TStringStream;
  Size: Integer;
  Key: TAESKey;
  ExpandedKey: TAESExpandedKey;
begin
  Result:= EmptyStr;
  Src:= TMemoryStream.Create;
  try
    Dst:= TStringStream.Create(Str);
    try
      StrToStream(Str,Src);
      Src.Position:= 0;
      FillChar(Key,Sizeof(Key),#0);
      if Length(Clave) > Sizeof(Key) then
        move(PChar(Clave)^,Key,Sizeof(key))
      else
        move(PChar(Clave)^,Key,Length(Clave));
      AESExpandKey(ExpandedKey,Key);
      // Guardamos el tamaño del archivo
      Src.ReadBuffer(Size,Sizeof(Size));
      AESDecryptStreamECB(Src,Dst,ExpandedKey);
      Dst.Size:= Size;
      Result:= Dst.DataString;
    finally
      Dst.Free;
    end;
  finally
    Src.Free;
  end;
end;

// Ejemplo
ShowMessage(Descifrar(Cifrar('Hola mundo','1234'),'1234'));
Responder Con Cita
  #6  
Antiguo 12-11-2007
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Smile Gracias!!

Domingo, sin palabras!! sos un grande!!

Muchas gracias.-
__________________
Saludos.

Marcelo D. Alegre
Responder Con Cita
  #7  
Antiguo 12-11-2007
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Post Un solo Inconveniente:

Sucede que uso Windows 2000. Por lo que se ve, en windows 2000 la crypt32.dll no tiene los metodos:
CryptBinaryToStringA
CryptStringToBinaryA

Por lo tanto baje la libreria nueva desde la web y la use sin problemas (creo)
Dado que puedo Cifrar texto sin problemas.

Sin embargo, al descifrar (no creo que tenga que ver con que uso la libreria por separado, lo digo por el error...) se produce una excepcion de "Stream read error", donde al debugear, el problema se da en la linea que tiene este codigo:
Código Delphi [-]
  Src.ReadBuffer(Size,Sizeof(Size));

la prueba la estoy haciendo llamando a la funcion de la siguiente manera:
edit1.text:=Descifrar('hola','1234');

Alguna idea de que me puede estar afectando?

Muchas gracias!!!
__________________
Saludos.

Marcelo D. Alegre
Responder Con Cita
Respuesta



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
HTTP ¿cifrado? N.P.I lag_0 Internet 3 13-04-2007 09:04:29
Un hombre demanda a Microsoft: el FBI accedió a su disco duro... cifrado marcoszorrilla La Taberna 6 06-03-2007 20:35:03
Disco de cifrado Casero (Especial para los aburridos pensadores de los últimos días) Neftali [Germán.Estévez] Noticias 0 22-11-2006 11:05:00
Cifrado de password... dunia_lv MS SQL Server 2 08-08-2006 22:06:18


La franja horaria es GMT +2. Ahora son las 22:24:13.


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