• Publicidad

Función HASH (SHA-1) de un fichero

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Función HASH (SHA-1) de un fichero

Notapor ricar » 2010-08-26 09:26 @434

Hola a todos.

¿Alguien sabe cómo calcular un hash (sha-1) de un fichero? Por ejemplo, de un ejecutable del sistema (.exe).

Muchas gracias.

Un saludo,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Publicidad

Re: Función HASH (SHA-1) de un fichero

Notapor explorer » 2010-08-26 11:18 @513

Con el módulo Digest::SHA1 lo resuelves fácilmente.

Aquí un ejemplo, verificado por el propio comando sha1sum del sistema:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@dv9210:~/Documentos/Desarrollo> perl -MDigest::SHA1 -E 'open F, "kk.pl"; $sha1 = Digest::SHA1->new; $sha1->addfile(*F); say $sha1->hexdigest'
f0fc2ec09ee4c033d849c640deb548da07c5192b
explorer@dv9210:~/Documentos/Desarrollo> sha1sum kk.pl
f0fc2ec09ee4c033d849c640deb548da07c5192b  kk.pl
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Hay otros módulos que permiten calcular otros SHA (SHA-1, SHA-224, SHA-256, SHA-384, y SHA-512), como el Digest::SHA.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Función HASH (SHA-1) de un fichero

Notapor ricar » 2010-08-26 16:44 @739

Hola explorer.

Gracias por tu respuesta. El problema es que cuando comprueba el hash resultante me sale distinto que los valores dados por otros programa (Hash Calculator y HashTab -para Windows-).

No sé porqué no me da el mismo valor.

Saludos,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Re: Función HASH (SHA-1) de un fichero

Notapor explorer » 2010-08-26 16:54 @746

No conozco esos programas, así que no puedo ayudarte mucho, salvo que, de alguna manera, tengas la seguridad de que los ficheros han sido leídos correctamente.

Por ejemplo, suele ser normal, a la hora de leer un fichero, olvidarnos que tenemos que hacerlo en binario, porque sino, los gestores de archivo de los lenguajes de ordenador traducirán de forma distinta los caracteres de final de línea (y otras conversiones más). Para eso hay que llevar un control de la longitud de lo leído.

No has publicado código, así que no puedo decirte si hay algo raro en él. Pero el ejemplo que te he mostrado, funciona muy bien.

¿Seguro que esos programas calculan el SHA1? ¿No será otro algoritmo de Has?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Función HASH (SHA-1) de un fichero

Notapor ricar » 2010-08-26 17:00 @750

Hola explorer.

Calculan sha1 entre otros.

El programa es sencillito
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Digest::SHA1;
  2. my $sha1 = Digest::SHA1->new;
  3. open $fichero, "hashFile.txt";
  4. $sha1->addfile($fichero);
  5. close $fichero;
  6. my $salida = $sha1->hexdigest;
  7. print "Salida: $salida\n";
  8.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Usando los otros programas coinciden en el resultado que, por desgracia, es diferente en mi programita de prueba.

Saludos,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Re: Función HASH (SHA-1) de un fichero

Notapor ricar » 2010-08-26 17:04 @752

Ok, solucionado con binmode, como bien apuntabas.

Muchas gracias.

Un saludo,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353

Re: Función HASH (SHA-1) de un fichero

Notapor explorer » 2010-08-26 17:45 @781

Claro, en mi ejemplo funciona sin binmode() porque yo uso un sistema operativo de verdad.

Muchas veces se me olvida que yo soy un afortunado por usar Linux, mientras que los demás se tropiezan con estas tonterías, en Windows.

Los finales de línea no son transformados porque no hace falta hacerlo. :)

Además, ahora que lo repaso, sí que lo pone en el manual de Digest:SHA1, en la función addfile(): hay que asegurarse, en la mayoría de las ocasiones, que el fichero esté puesto en modo binario.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Función HASH (SHA-1) de un fichero

Notapor ricar » 2010-08-28 11:05 @503

Bueno, en este caso creo que el problema es más el programador que el sistema operativo :wink:.

Saludos y gracias,
Ricar.
ricar
Perlero nuevo
Perlero nuevo
 
Mensajes: 71
Registrado: 2009-07-13 07:29 @353


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado