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
MD5CryptoServiceProviderno 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 classeMD5CryptoServiceProvidercriada 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