Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Intermedio » Función HASH (SHA-1) de un fichero  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 8 mensajes ] 
 
Nota Jue Ago 26, 2010 9:26 am

Perlero Nuevo
Registrado: Lun Jul 13, 2009 7:29 am
Mensajes: 56
Función HASH (SHA-1) de un fichero
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.


Nota Jue Ago 26, 2010 11:18 am
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Función HASH (SHA-1) de un fichero
Con el módulo Digest::SHA1 lo resuelves fácilmente.

Aquí un ejemplo, verificado por el propio comando sha1sum del sistema:
Syntax: [ Download ] [ Hide ]
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


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


Nota Jue Ago 26, 2010 4:44 pm

Perlero Nuevo
Registrado: Lun Jul 13, 2009 7:29 am
Mensajes: 56
Re: Función HASH (SHA-1) de un fichero
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.


Nota Jue Ago 26, 2010 4:54 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Función HASH (SHA-1) de un fichero
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


Nota Jue Ago 26, 2010 5:00 pm

Perlero Nuevo
Registrado: Lun Jul 13, 2009 7:29 am
Mensajes: 56
Re: Función HASH (SHA-1) de un fichero
Hola explorer.

Calculan sha1 entre otros.

El programa es sencillito
Syntax: [ Download ] [ Hide ]
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.  


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

Saludos,
Ricar.


Nota Jue Ago 26, 2010 5:04 pm

Perlero Nuevo
Registrado: Lun Jul 13, 2009 7:29 am
Mensajes: 56
Re: Función HASH (SHA-1) de un fichero  RESUELTO
Ok, solucionado con binmode, como bien apuntabas.

Muchas gracias.

Un saludo,
Ricar.


Nota Jue Ago 26, 2010 5:45 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Función HASH (SHA-1) de un fichero
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


Nota Sab Ago 28, 2010 11:05 am

Perlero Nuevo
Registrado: Lun Jul 13, 2009 7:29 am
Mensajes: 56
Re: Función HASH (SHA-1) de un fichero
Bueno, en este caso creo que el problema es más el programador que el sistema operativo :wink:.

Saludos y gracias,
Ricar.


Responder al tema  [ 8 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO