2017-08-24 5 views
-3

Je parcourt un dossier contenant des fichiers binaires et j'essaie de calculer les valeurs de hachage de chaque fichier, en particulier sha1 et sha256. Sur mes runs, j'ai étrangement les mêmes valeurs sha256 pour tous les fichiers, mais les valeurs sha1 sont différentes (donc correctes). Ci-dessous est une capture d'écran d'un fichier de sortie qui montre que le hachage sha1 a été fait correctement. Mais sha256 ne l'est pas. (noms de fichiers Désolé de chaque fichier binaire est aussi son SHA1)SHA1 différent mais identique SHA256

wat is dis

Y at-il quelque chose de mal avec mon processus? C'est le code approprié dans Python. JE NE VOIS PAS QUELQUE CHOSE. Pardon.

out.write("FILENAME,SHA1,SHA256\n") 
for root, dirs, files in os.walk(input_path): 
    for ffile in files: 
     myfile = os.path.join(root, ffile) 
     nice = os.path.join(os.getcwd(), myfile) 

     fo = open(nice, "rb") 
     a = hashlib.sha1(fo.read()) 
     b = hashlib.sha256(fo.read()) 
     paylname = os.path.basename(myfile) 
     mysha1 = str(a.hexdigest()) 
     mysha256 = str(b.hexdigest()) 
     fo.close() 

     out.write("{0},{1},{2}\n".format(paylname, mysha1, mysha256)) 
+2

Que pensez-vous que fo.read() 'va lire quand il aura déjà lu le contenu du fichier? – deceze

+3

lorsque vous faites 'fo.read()' pour le hachage sha1, vous avez lu le fichier entier, mais vous ne déplacez jamais le curseur au début du fichier. donc l'entrée du hachage sha256 est toujours la même (rien) –

+1

'hashlib.sha256 (b ''). hexdigest() == 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'' –

Répondre

0

que je mets dans mon commentaire ci-dessus, vous lisez le fichier entier pour le premier hachage, mais vous devez demander revenir au début du fichier à lire une deuxième fois pour le deuxième hachage. alternativement, vous pouvez le stocker dans une variable et le transmettre à chaque hash.

out.write("FILENAME,SHA1,SHA256\n") 
for root, dirs, files in os.walk(input_path): 
    for ffile in files: 
     myfile = os.path.join(root, ffile) 
     nice = os.path.join(os.getcwd(), myfile) 

     fo = open(nice, "rb") 
     a = hashlib.sha1(fo.read()) 
     fo.seek(0,0) # seek back to start of file 
     b = hashlib.sha256(fo.read()) 
     paylname = os.path.basename(myfile) 
     mysha1 = str(a.hexdigest()) 
     mysha256 = str(b.hexdigest()) 
     fo.close() 

     out.write("{0},{1},{2}\n".format(paylname, mysha1, mysha256))