Come ottenere il checksum MD5 in PowerShell
- Utilizzo dell’algoritmo di hashing MD5 in PowerShell
-
Utilizzo della classe
[System.Security.Cryptography.MD5]
in PowerShell -
Utilizzo della classe
MD5CryptoServiceProvider
in PowerShell - Conclusione

Quando si tratta di garantire l’integrità e la sicurezza dei dati in PowerShell, l’algoritmo di hashing MD5 rimane uno strumento prezioso nonostante la sua diminuzione di rilevanza nei contesti di sicurezza. Anche se non è raccomandato per scopi crittografici a causa delle vulnerabilità, l’MD5 rimane utile per verificare i trasferimenti di file e rilevare manomissioni.
Sfruttando le capacità di PowerShell, esploriamo vari metodi per calcolare i checksum MD5, fornendo approfondimenti sia su approcci fondamentali che avanzati.
Utilizzo dell’algoritmo di hashing MD5 in PowerShell
Anche se l’MD5 non è raccomandato per la sicurezza, è ancora una soluzione eccellente per controllare se un trasferimento di file è stato manomesso o ha avuto successo.
Innanzitutto, ottieni l’impronta MD5 del file prima e dopo il trasferimento.
Se il valore risulta lo stesso, il trasferimento del file non è stato manomesso. In caso contrario, è corrotto.
Per fare questo, utilizzeremo il cmdlet Get-FileHash
. Il cmdlet Get-FileHash
visualizza il valore hash di un file.
Utilizza l’algoritmo SHA256
per impostazione predefinita, ma possiamo aggiungere un parametro extra per utilizzare MD5
.
Get-FileHash [-Path] <file> [[-Algorithm] <algo>] [Options]
-Algorithm
: Specifica l’algoritmo di hash da utilizzare. In questo caso, utilizziamoMD5
.-Path
: Specifica il percorso del file per il quale si desidera calcolare il valore hash.
Possiamo anche utilizzarlo con uno stream invece di un percorso di file.
Get-FileHash [-InputStream] <stream> [[-Algorithm] <algo>] [Options]
-
[-InputStream] <stream>
: Specifica lo stream di input per il calcolo dell’hash, predefinito al file specificato da-Path
. -
[[-Algorithm] <algo>]
: Specifica l’algoritmo di hash (ad es.,MD5
,SHA1
) da utilizzare. -
[Options]
: Impostazioni aggiuntive come-Path
,-LiteralPath
,-Force
, ecc., per personalizzazione e gestione degli errori.
Ecco un esempio:
Get-FileHash -Path "path\example.txt" -Algorithm MD5
In questo codice, utilizziamo il cmdlet Get-FileHash
per calcolare il checksum MD5 del file situato in "C:\Path\To\File.txt"
. Il cmdlet calcola automaticamente il valore hash MD5 per il file specificato.
Output:
L’argomento -Path
non è obbligatorio, quindi non dobbiamo utilizzarlo. Invece, diamo il percorso del file e aggiungiamo il parametro dell’algoritmo per utilizzare MD5
invece di SHA256
.
Utilizzando PowerShell in uno script, possiamo creare una variabile con il risultato e ottenere il valore hash con la proprietà hash come $variabile.Hash
per assicurarci che sia lo stesso valore del file originale.
Hashing delle stringhe in PowerShell
Sfortunatamente, non esiste una funzione diretta o comandi nativi per generare un hash da una stringa in PowerShell.
Tuttavia, è possibile utilizzare Get-FileHash
con un parametro stream, quindi è una soluzione per calcolare l’hash di una stringa.
Cominciamo direttamente con il frammento di codice qui sotto:
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("MD5Online")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream -Algorithm MD5
In questo frammento di codice, creiamo un oggetto MemoryStream
$stringAsStream
e inizializziamo un StreamWriter $writer
per scrivere la stringa MD5Online
nello stream. Quindi svuotiamo lo scrittore per assicurarci che i dati siano scritti nello stream.
Dopo aver impostato la posizione dello stream all’inizio, utilizziamo il cmdlet Get-FileHash
con il parametro -InputStream
impostato su $stringAsStream
e il parametro -Algorithm
impostato su MD5
. Questo comando calcola il checksum MD5
della stringa fornita.
Output:
Rispetto alla prima sezione di questo articolo, l’unico cambiamento è che abbiamo utilizzato -InputStream
invece di -Path
.
Come puoi vedere nell’output, otteniamo l’hash MD5
della nostra stringa come risultato.
Utilizzo della classe [System.Security.Cryptography.MD5]
in PowerShell
La classe [System.Security.Cryptography.MD5]
fornisce funzionalità per calcolare il valore hash MD5 dei dati. Questa classe fa parte del namespace Cryptography del .NET Framework e offre una soluzione robusta ed efficiente per generare checksum MD5 negli script di PowerShell.
La classe [System.Security.Cryptography.MD5]
fornisce un metodo chiamato ComputeHash()
per calcolare il valore hash MD5. La sintassi è la seguente:
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$md5
: Rappresenta un’istanza della classe MD5 creata utilizzando il metodoCreate()
.$hash
: Memorizza il valore hash MD5 calcolato.$data
: Specifica i dati per i quali deve essere calcolato il checksum MD5. Questo può essere un array di byte che rappresenta il contenuto di un file o una stringa.
Ecco un esempio:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
In questo frammento di codice, convertiamo la stringa MD5Example
in un array di byte utilizzando [System.Text.Encoding]::UTF8.GetBytes()
. Creiamo quindi un’istanza della classe MD5 utilizzando [System.Security.Cryptography.MD5]::Create()
e chiamiamo il metodo ComputeHash()
per generare il valore hash MD5 per i dati forniti.
Infine, convertiamo il valore hash in un formato stringa utilizzando [System.BitConverter]::ToString()
e rimuoviamo eventuali trattini nell’output utilizzando l’operatore -replace
.
Output:
Utilizzo della classe MD5CryptoServiceProvider
in PowerShell
La classe MD5CryptoServiceProvider
fa parte del namespace Cryptography del .NET Framework. Questa classe fornisce funzionalità per calcolare il valore hash MD5 dei dati utilizzando l’algoritmo crittografico MD5.
La classe MD5CryptoServiceProvider
fornisce un metodo chiamato ComputeHash()
per calcolare il valore hash MD5. La sintassi è la seguente:
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$md5
: Rappresenta un’istanza della classeMD5CryptoServiceProvider
creata utilizzandoNew-Object
.$hash
: Memorizza il valore hash MD5 calcolato.$data
: Specifica i dati per i quali deve essere calcolato il checksum MD5. Questo può essere un array di byte che rappresenta il contenuto di un file o una stringa.
Ecco un esempio:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
In questo frammento di codice, convertiamo la stringa MD5Example
in un array di byte utilizzando [System.Text.Encoding]::UTF8.GetBytes()
. Creiamo quindi un’istanza della classe MD5CryptoServiceProvider
utilizzando New-Object
e chiamiamo il metodo ComputeHash()
per generare il valore hash MD5 per i dati forniti.
Infine, convertiamo il valore hash in un formato stringa utilizzando [System.BitConverter]::ToString()
e rimuoviamo eventuali trattini nell’output utilizzando l’operatore -replace
.
Output:
Conclusione
PowerShell offre molteplici possibilità per il calcolo dei checksum MD5, ciascuna adatta a diversi scenari e livelli di complessità. Sia che si utilizzi cmdlet integrati come Get-FileHash
, sfruttando la potenza delle classi .NET come System.Security.Cryptography.MD5
, o impiegando fornitori crittografici come MD5CryptoServiceProvider
, gli utenti di PowerShell hanno strumenti versatili a loro disposizione per garantire l’integrità e la sicurezza dei dati.
Comprendendo e utilizzando questi metodi in modo efficace, gli script PowerShell possono affrontare con sicurezza compiti che richiedono checksum MD5 con precisione e affidabilità.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn