Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Componente Hashes, para quien pueda interesar

Hola,

He subido al Directorio del ClubDelphi un componente que he dado en llamar "Hashes" (en un alarde de ingenio e imaginación) y que puede usarse para calcular el algoritmo MD5 y SHA1 de una cadena, archivo o "Stream".

El componente se basa en la unidad "Hashes.pas" de Domingo Seoane y yo me he limitado a encapsular las funciones de la misma dentro de un componente, que a su vez añade una serie de eventos y algún que otro método.

Pensaba usar la unidad "Hashes.pas" del maestro Seoane, pero, para archivos "grandes", en mi caso, al menos, precisaba de un evento que me fuera informando del progreso de la tarea.

Ya puestos añadí algún otro evento y un método para poder "abortar" una tarea comenzada. Y eso es todo. Yo pienso usarlo en cierto proyecto, de modo que, si veo que son menester ciertos cambios, actualizaré el archivo del componente en consecuencia.

Otra cosa. "Hashes" puede usarse como una clase más, es decir, puede instalarse (incluye un paquete para Delphi 2007) o puede usarse como cualquier otra clase, no es necesario instalarlo, vaya.

Además incluyo un ejemplo de uso del componente, aunque, en el ejemplo he utilizado el componente instalado en Delphi, de modo que si queréis probarlo (con el ejemplo) tendréis que hacer lo propio. Pero en todo caso veréis que es relativamente sencillo hacer uso del mismo.

PD. Para archivos y "Streams" "pequeños" y cadenas... lo cierto es que tal vez ya no merezca la pena el uso del componente, y baste y sobre con usar la unidad "Hashes.pas" de Domingo Seoane.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 08-07-2007 a las 23:55:36.
Responder Con Cita
  #2  
Antiguo 09-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
Muy bueno dec, lo dejaste perfecto.

Por cierto, para archivos grandes puede que sea mejor utilizar un buffer mayor. Por ejemplo:
Código Delphi [-]
GetMem(Buffer,1*1024*1024);
O incluso puedes dejar el tamaño del buffer como una propiedad mas del componente.
Responder Con Cita
  #3  
Antiguo 09-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hum... pues no se me habría ocurrido Domingo.

¿Qué tamaño de "Buffer" crees tú válido "por defecto"?

Y otra más... ¿crees que sería bueno limitar el máximo del "buffer"? ¿Y el mínimo?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 09-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Vale... a la primera pregunta casi me respondo yo... un "buffer" de 1024 (que luego se multiplicará por diez) puede ser lo suyo "por defecto", puesto que así es como se establece en la unidad "Hashes.pas" de donde parte todo.

Ahora bien, ¿algún tipo de control para el mínimo y máximo del "buffer"? Lo digo para actualizar ya el componente o no.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 09-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
Hombre, yo te recomendaría un tamaño de 1 mega (1024*1024) , o puede que medio mega (512*1024). En cuanto a limitar el máximo y el mínimo, es evidente que tiene que ser mayo de cero , y máximo lo que aguante, si alguien le coloca un tamaño demasiado grande simplemente provocara una excepción indicando que no hay memoria suficiente.
Responder Con Cita
  #6  
Antiguo 09-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

O sea, que esto no va bien, entonces:

Código Delphi [-]
GetMem(Buffer,10*FBuffer);

Siendo "FBuffer" 1024 (el valor por defecto).

Y no sé si ya esto sea una pasada... un par de instrucciones por debajo tenemos:

Código Delphi [-]
BytesRead:= Stream.Read(Buffer^, 10*FBuffer);

¿Me he pasado de listo Seoane?

Por ahora el "buffer" por defecto sería de 1024. No habría máximo y tampoco mínimo... se supone a quien lo toca que sabe lo que hace.

Edito: Sí que habría mínimo: el buffer ha de ser mayor que cero.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 09-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
Perfecto, veo que te diste cuenta de que otra instrucción había que cambiar.

Yo lo dejaría así:
Código Delphi [-]
GetMem(Buffer,FBuffer);
...
BytesRead:= Stream.Read(Buffer^, FBuffer);
Y limitaría el valor de FBuffer entre 1024 y 8*1024*1024, es decir entre 1KB y 8MB. Un rango bastante razonable.
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
Como hacer un CD protegido para que no se pueda copiar federiconqn21 Varios 11 24-04-2007 05:52:07
Ofrecen 25 mdd para quien salve el planeta sakuragi La Taberna 11 12-02-2007 21:16:21
Como hacer para que un programa NO pueda ser cerrado desde el Task Manager? bustio Varios 6 25-05-2006 18:58:04
Para quien busque un curso de builder Picard C++ Builder 0 14-06-2004 00:06:04
Una pregunta para Kinobi o cualquier persona que pueda ayudar Markoz Firebird e Interbase 1 03-06-2003 19:51:18


La franja horaria es GMT +2. Ahora son las 18:07:19.


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