Tabla de contenidos
Quería implementar SHA-256. Encontré una explicación del algoritmo en el documento PDF (https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf) y lo implementé basándome en eso.
Entorno
- Python 3.10
Terminología
Primero, repasemos los términos utilizados en el cálculo de SHA-256.
- dígito hexadecimal
-
Un valor de 16 bits que representa 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e. Un dígito hexadecimal puede representarse por una cadena de 4 caracteres (4 bits) que consiste en 0 o 1, por ejemplo,
0010
,1001
. - palabra, cadena de bits de w bits
- Una secuencia de dígitos hexadecimales. Ejemplos incluyen «abcdef» y «014d23e». Las palabras utilizadas en los cálculos de SHA utilizan el formato big-endian. El tamaño de palabra en SHA-256 es de 32 bits.
Pasos de Implementación
Si bien implementar desde la parte superior del documento en orden puede ser directo, al agregar partes faltantes secuencialmente, es posible que deba volver a funciones implementadas anteriormente. Por lo tanto, lo describiré aquí de manera organizada. Me enfoqué en la simplicidad en lugar de la velocidad o eficiencia e intenté evitar el uso de funciones incorporadas tanto como fuera posible, por lo que hay muchas áreas de mejora. Siguiendo los pasos a continuación, podrás implementar una función para generar SHA-256. (El código se proporciona, pero no hay mucha explicación del código en sí mismo).
El código completo también está disponible en Gist.