2015-09-30 14 views
9

Sto provando a calcolare i valori di hash SHA1 in Python rispetto ai file binari per un confronto successivo. Per assicurarmi che le cose funzionino, ho usato diversi metodi per verificare la validità del mio risultato. E sono contento di averlo fatto. Powershell e Python restituiscono valori diversi. La funzione SHA1 di 7zip concorda con i risultati di Powershell e FCIV di Microsoft concorda con i risultati di Python.Perché ottengo un hash SHA1 diverso tra PowerShell e 32 bit-Python su una DLL di sistema?

Python:

import hashlib 
with open("C:\\Windows\\system32\\wbem\\wmiutils.dll", "rb") as f: 
    print(hashlib.sha1(f.read()).hexdigest()) 

PowerShell:

PS C:\> Get-FileHash C:\Windows\System32\wbem\wmiutils.dll -Algorithm SHA1 

Risultati:

Python: d25f5b57d3265843ed3a0e7b6681462e048b29a9 
Powershell: B8C757BA70F6B145AD191A1B09C225FBA2BD55FB 

EDIT: 32-bit Python e 64 bit Powershell contro una dll system32. Quello era il problema. Ho alcuni compiti da fare ma fondamentalmente, le applicazioni a 32 bit e 64-bit ricevono un file diverso e, quindi, diversi risultati hash . Ho lanciato Python a 64 bit e ho eseguito lo stesso identico codice contro della DLL e come processo PowerShell a 64 bit. Ricevuti risultati coerenti quando si eseguono entrambi i processi come 32 bit.

EDIT2: trovato questa risorsa che spiega un po 'le cose. Almeno ha aiutato a capire cosa sta succedendo: https://www.sepago.com/blog/2008/04/20/windows-x64-all-the-same-yet-very-different-part-7-file-system-and-registry

+2

Non ricordo esattamente come Windows lo fa, ma potrebbe essere che Python sia a 32 bit e si sta ottenendo la versione a 32 bit di wmiutils.dll? Provalo su un altro file che non sia una DLL e non in system32. –

+0

Inchiodato! Lanciata una finestra Powershell a 32 bit e restituita: D25F5B57D3265843ED3A0E7B6681462E048B29A9 – mustbenewhere

+0

Ciò potrebbe anche essere dovuto a una differenza nel modo in cui Python/FCIV e 7zip/PowerShell gestiscono la conversione da stringa a bit: vedere [Hash SHA-1 sempre uguale a (https: // security.stackexchange.com/questions/18290/is-sha-1-hash-always-the-same) – JGreenwell

risposta

6

Questo accade perché si esegue una versione a 32 bit di Python e l'accesso a un sistema di dll - Windows magicamente reindirizza alla versione a 32 bit del dll, mentre PowerShell è in esecuzione come processo a 64 bit e vede la versione a 64 bit delle DLL.

Non sono sicuro di essere contento di saperlo o di rattristarlo.

+0

Visto che questo è specifico per l'hashing di dll, la tua visione è stata super utile. Grazie! – mustbenewhere

Problemi correlati