Kivonatok készítése fájlokhoz (Filehash)

Fájlok egyszerű azonosításához érdemes lehet az ő kivonatukat előállítani. Ez a kivonat egy szám, ami kellően nagy ahhoz, hogy kis esélye legyen annak, hogy két különböző fájlnak is éppen egyforma legyen a kivonata, de kellően kicsi ahhoz, hogy egyszerűen, „helytakarékosan” tároljuk ezeket az azonosítókat.

A következő szkript Lee Holmes PowerShell Cookbook könyvéből származik ( http://poshcode.org/2154 ), a fájlt a futószalagon várja és választható, hogy milyen kivonatot kérünk egy fájlhoz:

param(

[ValidateSet("MD5", "SHA1", "SHA256", "SHA384", "SHA512")]

$HashAlgorithm = "MD5"

)

process {

if(!$_.psiscontainer){

## Create the hash object that calculates the hash of our file.

$hashType = [Type] "System.Security.Cryptography.$HashAlgorithm"

$hasher = $hashType::Create()

 

$inputStream = New-Object IO.StreamReader $_.fullname

$hashBytes = $hasher.ComputeHash($inputStream.BaseStream)

$inputStream.Close()

## Convert the result to hexadecimal

$builder = New-Object System.Text.StringBuilder

$hashBytes | Foreach-Object { [void] $builder.Append($_.ToString("X2")) }

## Return a custom object with the important details from the hashing

$output = New-Object PsObject -Property @{

    Path = $_.fullname;

    HashAlgorithm = $hashAlgorithm;

    HashValue = $builder.ToString();

    Size = $_.length

}

$output

}

}

Nézzük ennek működését:

[23] PS C:\> dir c:\ee\d* | C:\_munka\filehash.ps1 | ft path, hashvalue

 

Path                                    HashValue

----                                    ---------

C:\ee\dat03 - Copy.csv                  CBB3578F8223955A11558FE4F0599CC7

C:\ee\dat03.csv                         CBB3578F8223955A11558FE4F0599CC7

Látható, hogy rázúdítva erre a FileHash.ps1 szkriptre a fájljaimat ez kiadja – többek között – a fájl elérési útját és a kiszámított kivonat értékét. Látható, hogy annak ellenére, hogy a két fájlnak más a neve, a kivonat – mivel az csak a fájl tartama alapján készült – egyforma. Nézzük, mi lesz a kivonatok értéke, ha egy karakter írok csak át az egyik fájlban:

[24] PS C:\> dir c:\ee\d* | C:\_munka\filehash.ps1 | ft path, hashvalue

 

Path                                    HashValue

----                                    ---------

C:\ee\dat03 - Copy.csv                  CD982847FF6212858624FB385947F30B

C:\ee\dat03.csv                         CBB3578F8223955A11558FE4F0599CC7

Látható, hogy a másolati fájlnak nagyon megváltozott a kivonatértéke.

PowerShell 5.0-ba már bekerült natívan ez a funkció a Get-FileHash  cmdlettel:

PS C:\> Get-FileHash -Path C:\Downloads\BiosUpdate.exe | fl

 

 

Algorithm : SHA256

Hash      : E9ED64C39C2DA440AE7950DB6EF35F7804C1D84CAFB7694BF74004C7C56C368D

Path      : C:\Downloads\BiosUpdate.exe

Megválaszthatjuk a hashalgorutmust és a futószalagról is betülthetjük a fájlokat:

PS C:\> dir C:\Downloads\*.exe | Get-FileHash -Algorithm MD5

 

Algorithm       Hash

---------       ----

MD5             50F1AE22F540CE3737D0C31EF0CF7144

MD5             DC7D985E03B8F315EBE88A4A89818FFE

MD5             27033DD8BF332B2037253F91D87205A6

MD5             9D4CFD9EA30DA6CA3507FB72CDD029C4



Word To HTML Converter