Cómo generar el hash MD5, SHA de una cadena de texto y de un fichero con Pythom y la librería hashlib. Ejemplo de programa en Python que solicita un fichero (o una cadena de texto) y obtiene el hash MD5, SHA512, SHA1, SHA224, SHA256, SHA384 y SHA512. También podremos obtener el tamaño del fichero.
- Programa que obtiene el hash MD5 y SHA de un fichero o un texto en Python.
- Ejecutar programa algoritmos.py que obtiene el hash MD5 y SHA de ficheros y cadenas de texto.
- Cómo obtener los algoritmos hash disponibles en nuestro Python.
Programa que obtiene el hash MD5 y SHA de un fichero o un texto en Python
A continuación listamos el código del programa completo que muestra un menú para que el usuario pueda introducir el fichero y pueda obtener el hash MD5 o SHA (en variaciones como SHA512, SHA1, SHA224, SHA256, SHA384 y SHA512) y también el MD5 y SHA512 de una cadena de texto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
import hashlib import os ficheroElegido = "" def md5Texto(texto): # Crear un objeto del tipo MD5 textoMD5 = hashlib.md5() # Utilizar el método update para generar el MD5 de la cadena textoMD5.update(texto.encode("UTF-8")) # Obtener los valores hexadecimales generados del MD5 textoMD5 = textoMD5.hexdigest() return textoMD5 def SHA512Texto(texto): # Crear un objeto del tipo SHA512 textoSHA512 = hashlib.sha512() # Utilizar el método update para generar el SHA512 de la cadena textoSHA512.update(texto.encode("UTF-8")) # Obtener los valores hexadecimales generados del SHA512 textoSHA512 = textoSHA512.hexdigest() return textoSHA512 def tamano(fichero): tamanoFichero = os.path.getsize(fichero)/1024 return fichero,tamanoFichero def md5(fichero): fp = open(fichero, "rb") buffer = fp.read() hashObj = hashlib.md5() hashObj.update(buffer) lastHash = hashObj.hexdigest().upper() md5 = lastHash fp.close() return fichero,md5 def sha1(fichero): fp = open(fichero, "rb") buffer = fp.read() # sha1 hashObj = hashlib.sha1() hashObj.update(buffer) lastHash = hashObj.hexdigest().upper() sha1 = lastHash fp.close() return fichero,sha1 def sha224(fichero): fp = open(fichero, "rb") buffer = fp.read() # sha224 hashObj = hashlib.sha224() hashObj.update(buffer) lastHash = hashObj.hexdigest().upper() sha224 = lastHash fp.close() return fichero,sha224 def sha256(fichero): fp = open(fichero, "rb") buffer = fp.read() # sha256 hashObj = hashlib.sha256() hashObj.update(buffer) lastHash = hashObj.hexdigest().upper() sha256 = lastHash fp.close() return fichero,sha256 def sha384(fichero): fp = open(fichero, "rb") buffer = fp.read() # sha384 hashObj = hashlib.sha384() hashObj.update(buffer) lastHash = hashObj.hexdigest().upper() sha384 = lastHash fp.close() return fichero,sha384 def sha512(fichero): fp = open(fichero, "rb") buffer = fp.read() # sha512 hashObj = hashlib.sha512() hashObj.update(buffer) lastHash = hashObj.hexdigest().upper() sha512 = lastHash fp.close() return fichero,sha512 def limpiarPantalla(): if os.name == "posix": os.system ("clear") elif os.name == "ce" or os.name == "nt" or os.name == "dos": os.system ("cls") while True: print("------------- MENÚ ------------- ") print("0 Elegir fichero") print("1 Tamaño del fichero") print("2 MD5 de fichero") print("3 SHA1 de fichero") print("4 SHA224 de fichero") print("5 SHA256 de fichero") print("6 SHA384 de fichero") print("7 SHA512 de fichero") print("8 MD5 de cadena de texto") print("9 SHA512 de cadena de texto") print("10 Salir") opcion = int(input("Introduzca una opción [0..10]: ")) limpiarPantalla() if opcion == 0: ficheroElegido = input("Introduzca la ruta y nombre de fichero: ") print("=" * 40) print("Fichero: ", ficheroElegido) print("=" * 40) elif opcion == 1: if ficheroElegido == "": print("=" * 40) print("Debe elegir un fichero (opción 0)") print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") else: fichero, tamanoFichero = tamano(ficheroElegido) print("=" * 40) print("Fichero: ", fichero) print("Tamaño: {0:8.0f} kb".format(tamanoFichero)) print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") elif opcion == 2: if ficheroElegido == "": print("=" * 40) print("Debe elegir un fichero (opción 0)") print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") else: print("=" * 40) fichero, lastHash= md5(ficheroElegido) print("Fichero: "+fichero) print("MD5: "+lastHash) print("=" * 40) elif opcion == 3: if ficheroElegido == "": print("=" * 40) print("Debe elegir un fichero (opción 0)") print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") else: print("=" * 40) fichero, ultimoHash = sha1(ficheroElegido) print("Fichero: " + fichero) print("SHA1: " + ultimoHash) print("=" * 40) elif opcion == 4: if ficheroElegido == "": print("=" * 40) print("Debe elegir un fichero (opción 0)") else: print("=" * 40) fichero, ultimoHash = sha224(ficheroElegido) print("Fichero: " + fichero) print("SHA224: " + ultimoHash) print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") elif opcion == 5: if ficheroElegido == "": print("=" * 40) print("Debe elegir un fichero (opción 0)") else: print("=" * 40) fichero, ultimoHash = sha256(ficheroElegido) print("Fichero: " + fichero) print("SHA256: " + ultimoHash) print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") elif opcion == 6: if ficheroElegido == "": print("=" * 40) print("Debe elegir un fichero (opción 0)") else: print("=" * 40) fichero, lastHaultimoHashsh = sha384(ficheroElegido) print("Fichero: " + fichero) print("SHA384: " + ultimoHash) print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") elif opcion == 7: if ficheroElegido == "": print("=" * 40) print("Debe elegir un fichero (opción 0)") else: print("=" * 40) fichero, ultimoHash = sha512(ficheroElegido) print("Fichero: " + fichero) print("SHA512: " + ultimoHash) print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") elif opcion == 8: print("=" * 40) textoCifrar = input("Introduzca el texto a codificar en MD5: ") print("El MD5 es: " + md5Texto(textoCifrar).upper()) print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") elif opcion == 9: print("=" * 40) textoCifrar = input("Introduzca el texto a codificar en SHA512: ") print("El SHA512 es: " + SHA512Texto(textoCifrar).upper()) print("=" * 40) input("\n\nPulsa INTRO para continuar con el programa...") else: break |
Guardaremos el código Python anterior en un fichero, por ejemplo llamado algoritmos.py.
Ejecutar programa algoritmos.py que obtiene el hash MD5 y SHA de ficheros y cadenas de texto
Una vez generado el fichero algoritmos.py con el código fuente Python anterior, lo podremos ejecutar con el comando:
«C:/Program Files/python.exe» d:/ProyectoA_Python/Encriptación/algoritmos.py
Suponiendo que tenemos el ejecutable python.exe en la carpeta C:/Program Files/ y suponiendo que tenemos el fichero algoritmos.py en la carpeta d:/ProyectoA_Python/Encriptación.
Tras ejecutarlo, nos mostrará un menú. En primer lugar, si queremos obtener el hash de un fichero, pulsaremos «0» e INTRO, para elegir un fichero:
Introduciremos la ruta y nombre del fichero para el que obtendremos el hash y pulsaremos INTRO:
La aplicación Python volverá al menú principal, mostrando el nombre del fichero elegido. Introduciremos una opción de menú del 1 al 7 para obtener el hash MD5 o SHA del fichero. Por ejemplo, si pulsamos «2» e INTRO, mostrará el MD5 del fichero elegido:
Nos mostrará en la parte superior el MD5 del fichero:
De la misma forma, pulsando cualquier otro número, podremos obtener el resto de hash. Si queremos cambiar de fichero volveremos a pulsar «0».
Eligiendo la opción «1» nos mostrará el tamaño del fichero elegido en kilobytes:
Y si queremos obtener el MD5 o el SHA512 de una cadena de texto pulsaremos 8 (para MD5) o 9 (para SHA512):
Nos pedirá que introduzcamos el texto, lo introduciremos, pulsaremos INTRO y nos obtendrá el SHA512:
Cómo obtener los algoritmos hash disponibles en nuestro Python
A continuación mostramos el código para obtener todos los algoritmos disponibles:
1 2 3 4 5 6 7 |
import hashlib # Algoritmos hash garantizados en todas las plataformas print("Garantizados:\n{}\n".format(", ".join(sorted(hashlib.algorithms_guaranteed)))) # Algoritmos hash que están disponibles en el intérprete de Python en ejecución print("Disponible en el Interprete:\n{}".format(", ".join(sorted(hashlib.algorithms_available)))) |
Al ejecutarlo mostrará:
1 2 3 4 |
Garantizados: blake2b, blake2s, md5, sha1, sha224, sha256, sha384, sha3_224, sha3_256, sha3_384, sha3_512, sha512, shake_128, shake_256, a3_512, sha512, sha512_224, sha512_256, shake_128, shake_256 Disponible en el Interprete: blake2s, md4, md5, md5-sha1, mdc2, ripemd160, sha1, sha224, sha256, sha384, sha3_224, sha3_256, sha3_384, sha3_512, sha512, sha512_224, sha512_256, shake_128, shake_256, sm3, whirlpool |