Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-09-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.054
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que la versión 3 sí trae, para versiones anteriores, mira esto.
Responder Con Cita
  #2  
Antiguo 06-09-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Lo que leo de ese articulo es acerca de encriptar la BD (completa) o su metadata, no los datos especificos de la aplicacion.

Con todo, no necesitas nada especial como soporte en la BD. Manda directo la cadena encriptada desde tu app, idealmente con un prefijo que exprese que algo+salt+value usaste, como:

Cita:
pbkdf2_sha256$30000$dFgV....$Q/hJH6fO5VdFqeE4....
(asi se hace en django)
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 07-09-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que la versión 3 sí trae, para versiones anteriores, mira esto.
No, no lo trae. Y en ese sentido Firebird es categórico:
Cita:
Why doesn't Firebird provide encryption?
Y dan una serie de alegaciones que me aprecen un tanto incosistentes:
Cita:
Encryption can only be as good as the secret key required for decryption. It can be worse but it cannot be better. There are several excellent encryption algorithms available that could be used. When good encryption is used, attacks are likely to be against the key rather than against the encryption itself.
¡Claro que el cifrado es tan bueno como la clave empleada para ello! Pero ese es un problema del usuario, en este caso del programador, y no del motor de la base de datos. No obstante ahora recuerdo que en su momento desarrollé un sistema de encriptación para Clipper y lo subí, adaptado, a otro foro. Lo buscaré.
Cita:
Empezado por mamcx Ver Mensaje
Con todo, no necesitas nada especial como soporte en la BD. Manda directo la cadena encriptada desde tu app, idealmente con un prefijo que exprese que algo+salt+value usaste

Última edición por Angel.Matilla fecha: 07-09-2017 a las 10:03:41.
Responder Con Cita
  #4  
Antiguo 07-09-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.054
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mira esto: http://delphi.jmrds.com/node/95
Responder Con Cita
  #5  
Antiguo 07-09-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Interesante código. Lo estudiaré con calma.
Responder Con Cita
  #6  
Antiguo 07-09-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.054
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Otro ejemplito:

Código Delphi [-]
// Estas dos "units" las puedes encontrar en el adjunto que he puesto
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
      // Preparamos la clave, lo ideal es que tenga 32 caracteres
      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 texto original
      Size:= Src.Size;
      Dst.WriteBuffer(Size,Sizeof(Size));
      // Ciframos el texto
      AESEncryptStreamECB(Src,Dst,ExpandedKey);
      // Lo codificamos a base64
      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);
      // Leemos el tamaño del texto
      Src.ReadBuffer(Size,Sizeof(Size));
      AESDecryptStreamECB(Src,Dst,ExpandedKey);
      Dst.Size:= Size;
      Result:= Dst.DataString;
    finally
      Dst.Free;
    end;
  finally
    Src.Free;
  end;
end;

Para terminar, un pequeño ejemplo de cómo funciona:

* Ciframos el texto "Hola mundo": Str := Cifrar("Hola mundo",'1234567890');
* Ahora la variable Str contiene el texto: CgAAADpn2TqC3VGqJmIQdPzgAaA=
* Desciframos el texto anterior: Str := Descifrar("CgAAADpn2TqC3VGqJmIQdPzgAaA=",'1234567890');
* Ahora la variable Str vuelve a contener el texto: "Hola mundo"

--------------------------------------------------
Otro más: http://delphi.jmrds.com/node/96


Como ves, el amigo Seoane tiene bastantes recursos sobre el tema.
Archivos Adjuntos
Tipo de Archivo: zip cript.zip (11,3 KB, 21 visitas)
Responder Con Cita
  #7  
Antiguo 07-09-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Ya encontré el código que comentaba antes. Es un pelín "pedestre" pero funciona y la misma función vale en ambos sentidos: para cifrar y descifrar. Este es el código que quedó al final, después de varios repasos de gente del foro.
Código PHP:
AnsiString Encriptar(AnsiString Texto)
{
     
AnsiString Salida "";
     
unsigned char Clave[] = "891475632";
     
unsigned char *cTexto Texto.c_str();

     for (
int i 00strlen(cTexto); ++, ++)
     {
          if (
strlen(Clave))
                
0;

          
Salida += char(cTexto[i] ^ (Clave[y] - 48));
     }
     return 
Salida;

Con esa clave, que puede ser tan larga como se quiera, que está puesta tendríamos:
- Si pasamos ANGELITO devuelve IGFAKLRL.
- Y si pasamos IGFAKLRL devuelve ANGELITO.

Por supuesto que está abierto a mejoras en cualquier sentido.
Responder Con Cita
  #8  
Antiguo 07-09-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
No!

Ese tipo de "cifrado" a duras penas es eficiente en contra de un infante que aun no sabe leer!

Usa un algoritmo *probado*. De lo contrario, ni pierdas el tiempo.
__________________
El malabarista.
Responder Con Cita
  #9  
Antiguo 18-12-2018
rrf rrf is offline
Miembro
 
Registrado: ago 2003
Ubicación: S/C Tenerife, España
Posts: 454
Poder: 21
rrf Va por buen camino
Estimado Casimiro:

Muchas gracias por el código y los Units que incluyes en el comentario #10 de este hilo. Se ajusta perfectamente a lo que estaba buscando para codificar texto: sencillez y efectividad.

Y, además de darte las gracias, te pregunto si ese código es de libre uso, si tiene autor y/o cuales son las condiciones para usarlo en un programa que podría llegar a distribuirse gratuita o comercialmente.

Saludos.

Última edición por rrf fecha: 18-12-2018 a las 22:34:55. Razón: corregir la redacción
Responder Con Cita
  #10  
Antiguo 18-12-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.054
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Me alegro que te sirva
Ese código puedes usarlo cuanto quieras, además originalmente lo escribió el amigo seoane, puedes visitar su web.
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
Tablas Hash godel Lazarus, FreePascal, Kylix, etc. 3 19-02-2008 11:40:03
codigo hash maco2007 Varios 4 20-10-2007 17:01:04
Calcular hash md5 Lepe Trucos 1 10-05-2007 15:11:58
Hash RaulChemical Varios 1 07-09-2004 20:10:11
¿Hash or not Hash? hgiacobone Varios 5 17-07-2003 19:43:26


La franja horaria es GMT +2. Ahora son las 20:38:00.


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