Get-FileHash

Calcola il valore hash per un file usando un algoritmo hash specificato.

Sintassi

Get-FileHash
   [-Path] <String[]>
   [[-Algorithm] <String>]
   [<CommonParameters>]
Get-FileHash
   [-LiteralPath] <String[]>
   [[-Algorithm] <String>]
   [<CommonParameters>]
Get-FileHash
   [-InputStream] <Stream>
   [[-Algorithm] <String>]
   [<CommonParameters>]

Descrizione

Il Get-FileHash cmdlet calcola il valore hash per un file usando un algoritmo hash specificato. Un valore hash è un valore univoco che corrisponde al contenuto del file. Anziché identificare il contenuto di un file in base al nome di file, all'estensione o un'altra designazione, un hash assegna un valore univoco al contenuto di un file. Le estensioni e i nomi di file possono essere modificati senza alterare il contenuto del file e senza modificare il valore hash. Analogamente, il contenuto del file può essere modificato senza modificare il nome o l'estensione. Tuttavia, anche la modifica di un singolo carattere nel contenuto di un file comporta la modifica del valore hash del file.

Lo scopo dei valori hash è fornire un modo crittograficamente sicuro per verificare che il contenuto di un file non sia stato modificato. Anche se alcuni algoritmi hash, tra cui MD5 e SHA1, non sono più considerati sicuri da attacchi, l'obiettivo di un algoritmo hash sicuro è quello di rendere impossibile modificare il contenuto di un file, per errore o da tentativi dannosi o non autorizzati, e mantenere lo stesso valore hash. È anche possibile utilizzare i valori hash per determinare se due file diversi hanno esattamente lo stesso contenuto. Se i valori hash di due file sono identici, anche il contenuto dei file è identico.

Per impostazione predefinita, il Get-FileHash cmdlet usa l'algoritmo SHA256, anche se è possibile usare qualsiasi algoritmo hash supportato dal sistema operativo di destinazione.

Esempio

Esempio 1: Calcolare il valore hash per un file

In questo esempio viene usato il Get-FileHash cmdlet per calcolare il valore hash per il /etc/apt/sources.list file. L'algoritmo hash usato è l'impostazione predefinita SHA256. L'output viene inviato tramite pipe al Format-List cmdlet per formattare l'output come elenco.

Get-FileHash /etc/apt/sources.list | Format-List

Algorithm : SHA256
Hash      : 3CBCFDDEC145E3382D592266BE193E5BE53443138EE6AB6CA09FF20DF609E268
Path      : /etc/apt/sources.list

Esempio 2: Calcolare il valore hash per un file ISO

Questo esempio usa il Get-FileHash cmdlet e l'algoritmo SHA384 per calcolare il valore hash per un file ISO scaricato da Internet da un amministratore. L'output viene inviato tramite pipe al Format-List cmdlet per formattare l'output come elenco.

Get-FileHash C:\Users\user1\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List

Algorithm : SHA384
Hash      : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path      : C:\Users\user1\Downloads\Contoso8_1_ENT.iso

Esempio 3: Calcolare il valore hash di un flusso

Per questo esempio si usa System.Net.WebClient per scaricare un pacchetto dalla pagina di versione di PowerShell. La pagina della versione documenta anche l'hash SHA256 di ogni file di pacchetto. È possibile confrontare il valore hash pubblicato con quello calcolato con Get-FileHash.

$wc = [System.Net.WebClient]::new()
$pkgurl = 'https://github.com/PowerShell/PowerShell/releases/download/v6.2.4/powershell_6.2.4-1.debian.9_amd64.deb'
$publishedHash = '8E28E54D601F0751922DE24632C1E716B4684876255CF82304A9B19E89A9CCAC'
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash

True

Esempio 4: Calcolare l'hash di una stringa

PowerShell non fornisce un cmdlet per calcolare l'hash di una stringa. Tuttavia, è possibile scrivere una stringa in un flusso e usare il parametro InputStream di Get-FileHash per ottenere il valore hash.

$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("Hello world")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream | Select-Object Hash

Hash
----
64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C

Parametri

-Algorithm

Specifica la funzione hash crittografica da usare per calcolare il valore hash del contenuto del file o del flusso specificato. Una funzione hash crittografica ha la proprietà che è infeasible per trovare due file diversi con lo stesso valore hash. Le funzioni hash vengono comunemente usate con le firme digitali e per l'integrità dei dati. I valori validi per questo parametro sono:

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MD5

Se non viene specificato alcun valore o se il parametro viene omesso, il valore predefinito è SHA256.

Per motivi di sicurezza, MD5 e SHA1, che non sono più considerati sicuri, devono essere usati solo per la semplice convalida delle modifiche e non per generare valori hash per i file che richiedono la protezione da attacchi o manomissioni.

Type:String
Accepted values:SHA1, SHA256, SHA384, SHA512, MD5
Position:1
Default value:SHA256
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputStream

Specifica il flusso di input.

Type:Stream
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Specifica il percorso di un file. A differenza del parametro Path , il valore del parametro LiteralPath viene usato esattamente come viene tipizzato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare i caratteri come sequenze di escape.

Type:String[]
Aliases:PSPath, LP
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Path

Specifica il percorso di uno o più file come matrice. I caratteri jolly sono consentiti.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

Input

String

È possibile inviare tramite pipe una stringa contenente un percorso a un file a questo cmdlet.

Output

Microsoft.PowerShell.Utility.FileHash

Questo cmdlet restituisce un oggetto che rappresenta il percorso del file specificato, il valore dell'hash calcolato e l'algoritmo utilizzato per calcolare l'hash.