Para todos los fines prácticos, probablemente sea mejor usar
hashlib.sha256 (“mensaje aquí”) .hexdigest ()
Puede encontrar una implementación de Python puro aquí:
- ¿Es posible representar binarios de 8 bits en binarios de 6 bits?
- ¿Por qué la notación O grande es más común si la notación theta grande nos da más información?
- ¿Cuál es el mejor camino para dominar el aprendizaje profundo?
- Se dan N nodos idénticos. ¿Cuántos árboles binarios son posibles?
- ¿Hay alguna manera de devolver una matriz de recursividad?
pypy / pypy / source / lib_pypy / _sha256.py
o aquí:
thomdixon / pysha2
Si realmente debe rodar el suyo, comience con el psuedocode de la documentación oficial, o la versión de Wikipedia funcionará igual de bien: SHA-2 Deberá:
- rotar palabras de 32 bits: que se pueden escribir utilizando los operadores de desplazamiento de bits <>, a partir de uno de los ejemplos anteriores, la rotación de ‘x’ a la derecha por ‘y’ bits se escribe como:
def _rotr (self, x, y):
return ((x >> y) | (x << (32-y))) & 0xFFFFFFFFL
- realizar operaciones lógicas (xor, or, and, not) en palabras de 32 bits: todas son compatibles de forma nativa, vea BitwiseOperators – Python Wiki
- agregue palabras de 32 bits. La única sutileza para notar es que, a diferencia de C, la adición no se transfiere, por lo que debe usar manualmente ‘& 0xffffffffl’ después de cada adición para mantener la variable limitada a un valor de 32 bits.
- Convierta la entrada de una cadena en palabras binarias: esto se hace con la función struct.unpack (y al revés con struct.pack)