md5 python 3
¿Cómo calculo la suma de comprobación md5 de un archivo en Python? (1)
En cuanto a su error y lo que falta en su código. m es el nombre que no se definió para la función getmd5 (). Sin ofender, sé que eres un principiante, pero tu código está por todos lados. Veamos sus problemas uno por uno :) En primer lugar, no está utilizando el método hashlib.md5.hexdigest () correctamente. Encuentre la explicación sobre las funciones de haslib Python Doc Library . La forma correcta de devolver md5 para la cadena proporcionada es hacer algo como esto:
>>> import hashlib
>>> hashlib.md5("filename.exe").hexdigest()
''2a53375ff139d9837e93a38a279d63e5''
Sin embargo, tienes un problema mayor aquí. Está calculando MD5 en una cadena de nombre de archivo , donde en realidad MD5 se calcula en función del contenido del archivo. Necesitarás básicamente leer el contenido del archivo y canalizarlo a través de md5. Mi próximo ejemplo no es muy eficiente, pero algo así:
>>> import hashlib
>>> hashlib.md5(open(''filename.exe'',''rb'').read()).hexdigest()
''d41d8cd98f00b204e9800998ecf8427e''
Como puedes ver claramente, el segundo hash MD5 es totalmente diferente del primero. La razón de esto es que estamos presionando el contenido del archivo, no solo el nombre del archivo. Una solución simple podría ser algo como eso:
# Import hashlib library (md5 method is part of it)
import hashlib
# File to check
file_name = ''filename.exe''
# Correct original md5 goes here
original_md5 = ''5d41402abc4b2a76b9719d911017c592''
# Open,close, read file and calculate MD5 on its contents
with open(file_name) as file_to_check:
# read contents of the file
data = file_to_check.read()
# pipe contents of the file through
md5_returned = hashlib.md5(data).hexdigest()
# Finally compare original MD5 with freshly calculated
if orginal_md5 == md5_returned:
print "MD5 verified."
else:
print "MD5 verification failed!."
Mire la publicación Python: generación de una suma de comprobación MD5 de un archivo que explica en detalle cómo se puede lograr de manera eficiente.
La mejor de las suertes.
He hecho un código en python que busca un md5 en un archivo y se asegura de que el md5 coincida con el del original. Esto es lo que he desarrollado:
#Defines filename
filename = "file.exe"
#Gets MD5 from file
def getmd5(filename):
return m.hexdigest()
md5 = dict()
for fname in filename:
md5[fname] = getmd5(fname)
#If statement for alerting the user whether the checksum passed or failed
if md5 == ''>md5 will go here<'':
print("MD5 Checksum passed. You may now close this window")
input ("press enter")
else:
print("MD5 Checksum failed. Incorrect MD5 in file ''filename''. Please download a new copy")
input("press enter")
exit
Pero siempre que ejecuto el código, obtengo lo siguiente:
Traceback (most recent call last):
File "C:/Users/Username/md5check.py", line 13, in <module>
md5[fname] = getmd5(fname)
File "C:/Users/Username/md5check.py, line 9, in getmd5
return m.hexdigest()
NameError: global name ''m'' is not defined
¿Hay algo que me falta en mi código?