Como obter a soma de verificação MD5 no PowerShell
- Usando o Algoritmo de Hashing MD5 no PowerShell
-
Usando a Classe
[System.Security.Cryptography.MD5]
no PowerShell -
Usando a Classe
MD5CryptoServiceProvider
no PowerShell - Conclusão

Quando se trata de garantir a integridade e a segurança dos dados no PowerShell, o algoritmo de hashing MD5 continua sendo uma ferramenta valiosa, apesar de sua relevância em diminuição nos contextos de segurança. Embora não seja recomendado para fins criptográficos devido a vulnerabilidades, o MD5 continua sendo útil para verificar transferências de arquivos e detectar adulterações.
Aproveitando as capacidades do PowerShell, exploramos vários métodos para calcular somas de verificação MD5, fornecendo insights sobre abordagens tanto fundamentais quanto avançadas.
Usando o Algoritmo de Hashing MD5 no PowerShell
Mesmo que o MD5 não seja recomendado para segurança, ainda é uma excelente solução para verificar se uma transferência de arquivo foi adulterada ou bem-sucedida.
Primeiro, obtenha a impressão digital MD5 do arquivo antes e depois da transferência.
Se resultar no mesmo valor, a transferência de arquivo não foi adulterada. Caso contrário, está corrompida.
Para fazer isso, vamos usar o cmdlet Get-FileHash
. O cmdlet Get-FileHash
exibe o valor hash de um arquivo.
Ele usa o algoritmo SHA256
por padrão, mas podemos adicionar um parâmetro extra para usar o MD5
.
Get-FileHash [-Path] <file> [[-Algorithm] <algo>] [Options]
-Algorithm
: Especifica o algoritmo de hash a ser usado. Neste caso, usamosMD5
.-Path
: Especifica o caminho para o arquivo do qual você deseja calcular o valor hash.
Podemos também utilizá-lo com um stream em vez de um caminho de arquivo.
Get-FileHash [-InputStream] <stream> [[-Algorithm] <algo>] [Options]
-
[-InputStream] <stream>
: Especifica o stream de entrada para cálculo do hash, padrão para o arquivo especificado por-Path
. -
[[-Algorithm] <algo>]
: Especifica o algoritmo de hash (por exemplo,MD5
,SHA1
) a ser usado. -
[Options]
: Configurações adicionais como-Path
,-LiteralPath
,-Force
, etc., para personalização e tratamento de erros.
Aqui está um exemplo:
Get-FileHash -Path "path\example.txt" -Algorithm MD5
Neste código, utilizamos o cmdlet Get-FileHash
para calcular a soma de verificação MD5 do arquivo localizado em "C:\Path\To\File.txt"
. O cmdlet calcula automaticamente o valor hash MD5 para o arquivo especificado.
Saída:
O argumento -Path
não é obrigatório, então não precisamos usá-lo. Em vez disso, damos o caminho do arquivo e adicionamos o parâmetro do algoritmo para usar MD5
em vez de SHA256
.
Usando o PowerShell em um script, podemos criar uma variável com o resultado e obter o valor hash com a propriedade hash como $variable.Hash
para garantir que é o mesmo valor do arquivo original.
Hashing de Strings no PowerShell
Infelizmente, não há funções diretas ou comandos nativos para gerar um hash a partir de uma string no PowerShell.
No entanto, é possível usar Get-FileHash
com um parâmetro de stream, então é uma solução para calcular o hash de uma string.
Vamos começar diretamente com o snippet abaixo:
$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
Neste trecho de código, criamos um objeto MemoryStream
$stringAsStream
e inicializamos um StreamWriter $writer
para escrever a string MD5Online
no stream. Em seguida, esvaziamos o writer para garantir que os dados sejam escritos no stream.
Depois de definir a posição do stream de volta ao início, utilizamos o cmdlet Get-FileHash
com o parâmetro -InputStream
definido como $stringAsStream
e o parâmetro -Algorithm
definido como MD5
. Este comando calcula a soma de verificação MD5
da string fornecida.
Saída:
Comparado à primeira seção deste artigo, a única mudança é que usamos -InputStream
em vez de -Path
.
Como você pode ver na saída, obtemos o hash MD5
da nossa string como resultado.
Usando a Classe [System.Security.Cryptography.MD5]
no PowerShell
A classe [System.Security.Cryptography.MD5]
fornece funcionalidade para calcular o valor hash MD5 dos dados. Esta classe faz parte do namespace de Criptografia do .NET Framework e oferece uma solução robusta e eficiente para gerar somas de verificação MD5 em scripts do PowerShell.
A classe [System.Security.Cryptography.MD5]
fornece um método chamado ComputeHash()
para calcular o valor hash MD5. A sintaxe é a seguinte:
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$md5
: Representa uma instância da classe MD5 criada usando o métodoCreate()
.$hash
: Armazena o valor hash MD5 computado.$data
: Especifica os dados para os quais a soma de verificação MD5 precisa ser calculada. Isso pode ser um array de bytes representando o conteúdo do arquivo ou uma string.
Aqui está um exemplo:
$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
Neste trecho de código, convertendo a string MD5Example
em um array de bytes usando [System.Text.Encoding]::UTF8.GetBytes()
. Em seguida, criamos uma instância da classe MD5 usando [System.Security.Cryptography.MD5]::Create()
e chamamos o método ComputeHash()
para gerar o valor hash MD5 para os dados fornecidos.
Por fim, convertendo o valor hash para um formato de string usando [System.BitConverter]::ToString()
e removendo quaisquer traços na saída usando o operador -replace
.
Saída:
Usando a Classe MD5CryptoServiceProvider
no PowerShell
A classe MD5CryptoServiceProvider
faz parte do namespace de Criptografia do .NET Framework. Esta classe fornece funcionalidade para calcular o valor hash MD5 dos dados usando o algoritmo criptográfico MD5.
A classe MD5CryptoServiceProvider
fornece um método chamado ComputeHash()
para calcular o valor hash MD5. A sintaxe é a seguinte:
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$md5
: Representa uma instância da classeMD5CryptoServiceProvider
criada usandoNew-Object
.$hash
: Armazena o valor hash MD5 computado.$data
: Especifica os dados para os quais a soma de verificação MD5 precisa ser calculada. Isso pode ser um array de bytes representando o conteúdo do arquivo ou uma string.
Aqui está um exemplo:
$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
Neste trecho de código, convertemos a string MD5Example
em um array de bytes usando [System.Text.Encoding]::UTF8.GetBytes()
. Em seguida, criamos uma instância da classe MD5CryptoServiceProvider
usando New-Object
e chamamos o método ComputeHash()
para gerar o valor hash MD5 para os dados fornecidos.
Por fim, convertemos o valor hash para um formato de string usando [System.BitConverter]::ToString()
e removemos quaisquer traços na saída usando o operador -replace
.
Saída:
Conclusão
O PowerShell oferece várias maneiras de computar somas de verificação MD5, cada uma adequada a diferentes cenários e níveis de complexidade. Seja usando cmdlets embutidos como Get-FileHash
, aproveitando o poder de classes do .NET como System.Security.Cryptography.MD5
, ou utilizando provedores criptográficos como MD5CryptoServiceProvider
, os usuários do PowerShell têm ferramentas versáteis à sua disposição para garantir a integridade e a segurança dos dados.
Ao compreender e utilizar esses métodos de forma eficaz, os scripts do PowerShell podem lidar com confiança em tarefas que requerem somas de verificação MD5 com precisão e confiabilidade.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn