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.
Tipo: | String |
Valori accettati: | SHA1, SHA256, SHA384, SHA512, MD5 |
Posizione: | 1 |
Valore predefinito: | SHA256 |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-InputStream
Specifica il flusso di input.
Tipo: | Stream |
Posizione: | 0 |
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, LP |
Posizione: | 0 |
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: | True |
Accettare caratteri jolly: | True |
Input
È 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.