es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python: modo binario vs codificación y su sha256 Python: modo binario frente a codificación y su sha256

Estoy de nuevo en los misterios de Python:
¿Puede decirme por qué los sha256 creados no son iguales (pero el archivo release.md permanece igual)?

import re, os, os.path, hashlib, time, sys

with open("release.md", "rb") as f:
    h = f.read()
    #print(h)
    print(hashlib.sha256(h).hexdigest())


with open("release.md", "r", encoding=sys.getdefaultencoding()) as f:
    h = f.read()
    #print(h)
    print(hashlib.sha256(h.encode(sys.getdefaultencoding())).hexdigest())

Salida:

8c1938c9b495afe666d41a23cb6d108b3c351d6c8b5aca7019e214df1c47e240
32b8f1a46cea09e6c358390c8a81b80e233bd6c991c010cad6ad5489362e20d3

Está usando Python 3.9.1 en Windows 10.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual los SHA256 creados no son iguales se debe a la forma en que se abre el controlador de archivos en el segundo bloque de código.

    En el primer bloque, el archivo se abre en modo binario ("rb") y los contenidos se leen como bytes, que se pueden hashear directamente usando hashlib.sha256().

    Sin embargo, en el segundo bloque, el archivo se abre en modo de texto ("r") con la codificación predeterminada (sys.getdefaultencoding()), por lo que f.read() devuelve un objeto de tipo string. Para poder hashear el string, es necesario codificarlo usando la misma codificación utilizada al abrir el archivo. En este caso, estamos utilizando sys.getdefaultencoding() para codificar el string antes de hashearlo.

    Dado que los dos métodos de lectura del archivo resultan en tipos de objetos diferentes que se hashean, los hashes SHA256 resultantes son diferentes.

Comments are closed.