Condividi tramite


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 Powershell.exe file. L'algoritmo hash usato è il valore predefinito, SHA256. L'output viene inviato tramite pipe al Format-List cmdlet per formattare l'output come elenco.

Get-FileHash $PSHOME\powershell.exe | Format-List

Algorithm : SHA256
Hash      : 908B64B1971A979C7E3E8CE4621945CBA84854CB98D76367B791A6E22B5F6D53
Path      : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

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
  • MACTripleDES
  • MD5
  • RIPEMD160

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.

Tipo:String
Valori accettati:SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160
Posizione:Named
Valore predefinito:SHA256
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-InputStream

Specifica il flusso di input.

Tipo:Stream
Posizione:Named
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly: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.

Tipo:String[]
Alias:PSPath
Posizione:Named
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-Path

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

Tipo:String[]
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly: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.