Situatie
Se va arăta integritatea fișierelor în Windows folosind PowerShell: calcularea sumelor de control cu Get-FileHash, compararea directoarelor după hash și detectarea fișierelor duplicate sau corupte.
Pentru a verifica dacă fișierele mari, distribuțiile sau imaginile ISO sunt descărcate complet, fără erori și nu au fost modificate în timpul transferului, puteți verifica hash-ul acestora. Spre deosebire de numele sau extensia unui fișier, hash-ul unui fișier(cunoscut și sub numele de sumă de control) este o valoare unică care depinde exclusiv de conținutul fișierului. Hash-ul rezultat poate fi comparat cu cel original pentru a verifica integritatea și autenticitatea fișierului.
În Windows, puteți calcula valoarea hash a oricărui fișier fără a utiliza instrumente terțe. Puteți utiliza fie comanda consolei CertUtil.exe, fie cmdletul Get-FileHash PowerShell.
Solutie
Cum se calculează hash-ul unui fișier folosind PowerShell
Deschideți consola PowerShell și specificați calea completă către fișierul al cărui hash doriți să îl calculați:
Get-FileHash F:\ISO\Win_11_25H2.ISO
Algoritmul SHA256 este utilizat în mod implicit pentru calcularea hash-ului fișierului. După un timp, comanda va afișa pe ecran hash-ul fișierului specificat. Timpul necesar pentru calcularea hash-ului unui fișier cu comanda Get-FileHash depinde de dimensiunea fișierului și de algoritmul de hash utilizat.
Dacă conținutul fișierului se modifică chiar și cu un singur caracter, hash-ul său va fi diferit la următoarea verificare. Cmdletul Get-FileHash vă permite să specificați algoritmul criptografic specific utilizat pentru calcularea hash-ului.
Sunt acceptați următorii algoritmi:
- SHA1
- SHA256 (implicit)
- SHA384
- SHA512
- MD5
- MACTripleDES
- RIPEMD160
Pentru a utiliza o funcție hash criptografică specifică, specificați-o cu argumentul -Algorithm:
Get-FileHash -Algorithm MD5 F:\ISO\Win_11_25H2.ISO
Nota bene: Deși MD5 este cel mai rapid algoritm pentru obținerea unei sume de control a fișierului, acesta este considerat în prezent învechit și nesigur. Algoritmul SHA-256 oferă performanțe bune și o probabilitate redusă de coliziune(când două fișiere diferite au aceeași sumă de control).
Cum sa găsiți duplicate
Cu PowerShell, puteți găsi rapid fișierele duplicate dintr-un director pe baza conținutului lor, indiferent de numele sau extensiile fișierelor:
Cu rol de exemplu:
Get-ChildItem -Recurse -File “F:\IS0” |
Get-FileHash | Group-Object -Property Hash | Where-Object { $_.Count -gt 1 }
ForEach-Object { $_.Group | Select-Object Path, Hash }
Cum se compară conținutul directorului după hash-ul fișierului
Adesea este necesar să se compare conținutul a două directoare pentru a se asigura că sunt identice, de exemplu după copierea de rezervă a fișierelor. Acest lucru ajută la asigurarea consecvenței copiei de rezervă. Cea mai simplă metodă de a compara conținutul directoarelor este calcularea și compararea hash-urilor fișierelor din acestea.
Acest script (cu rol de exemplu) PowerShell calculează hash-urile pentru toate fișierele din folderele sursă și destinație, afișând numai cele cu conținut diferit:
$SourceFolder = “C:\Data”
$TargetFolder = “F:\Data”
$FirstFolder = Get-ChildItem $SourceFolder |
Select-Object -Property *,
@{name=”Hash”;expression={(Get-FileHash $_.FullName).hash}}
$SecondFolder = Get-ChildItem $TargetFolder |
Select-Object -Property *,
@{name=”Hash”;expression={(Get-FileHash $_.FullName).hash}}
Compare-Object -Ref $FirstFolder -Dif $SecondFolder -Property Name,Hash
Cum se verifică integritatea fișierului în comparație cu o sumă de control de referință (Reference Checksum)
Mulți dezvoltatori publică sumele de control ale fișierelor sursă pe site-urile lor oficiale pentru a permite utilizatorilor să verifice integritatea fișierului. Utilizatorul poate calcula suma de control a fișierului și o poate compara cu valoarea de referință pentru a verifica integritatea fișierului și a confirma că acesta nu a fost corupt, deteriorat sau modificat în timpul descărcării.
Prin urmare, un alt caz de utilizare obișnuit este obținerea valorii hash a unui fișier și compararea acesteia cu cea așteptată:
$isoFile = “F:\ISO\Win_11_25H2.ISO”
$hashFile = “F:\ISO\Win_11_25H2.hash”
$computedHash = (Get-FileHash $isoFile).Hash.Trim()
$expectedHash = (Get-Content $hashFile).Trim()
$computedHash -eq $expectedHash
Acest script va returna True dacă hash-ul fișierului corespunde cu valoarea de referință și False dacă acestea diferă.
Leave A Comment?