Verificando integridade de arquivos por meio de hashes via PowerShell

Comparando hashes de arquivos via PowerShell

Neste tutorial vamos mostrar como utilizar o Windows PowerShell para verificar a autenticidade de um arquivo baixado da Internet por meio do valor de hash disponibilizado no site de origem. Para isso faremos uso do cmdlet Get-FileHash.

1. Primeiro, calcule o hash com o cmdlet Get-FileHash:

Get-FileHash arquivo.iso -Algorithm Algoritmo-de-Hash | Format-List

Isso mostrará o hash no Powershell, de acordo com o algoritmo escolhido (MD5, SHA1, etc). Para salvá-lo em um arquivo de texto, faça o seguinte:

Get-FileHash arquivo.iso -Algorithm Algoritmo-de-Hash | Format-List > arquivo.txt

2. Copie o hash original do arquivo baixado (obtido no site de download) e execute o comando no formato a seguir para compará-lo com o hash presente no arquivo gerado no passo 1 (que também deve ser copiado):

"hash-original".equals("hash-calculado",1)

3. Se o valor retornado for 0, as duas strings são idênticas e, portanto, os hashes são iguais. Se o valor for diferente de zero, como -1, os hashes são diferentes e sua imagem iso está corrompida.

Exemplo:

Baixamos uma imagem iso de instalação do sistema operacional Debian GNU/Linux. Após o download, copiamos o hash MD5 presente no próprio site da distribuição, cujo valor é b3cd3e2e6a74b93ab41059c47c2b43fd  (imagem debian-8.5.0-i386-netinst.iso).

Vamos usar o PowerShell para verificar se essa imagem não foi corrompida durante o download. Para isso efetue os procedimentos a seguir:

1 – Vamos gerar o hash do arquivo que foi baixado e salvá-lo em um arquivo. Entramos no diretório de download do arquivo e emitimos o comando a seguir (o nome completo do arquivo é debian-8.5.0-i386-netinst.iso), especificando o hash adequado (MD5 no caso) e o nome de arquivo onde ele será salvo (hash-arquivo.txt):

Get-FileHash debian-8.5.0-i386-netinst.iso -Algorithm MD5 | Format-List > hash-arquivo.txt

Desta forma teremos o hash do arquivo que baixamos da Internet calculado e salvo no arquivo de texto hash-arquivo.txt. Veja o conteúdo do arquivo gerado contendo o hash calculado:

Hash MD% de arquivo criado no PowerShell

2 – Agora vamos efetuar a comparação do hash calculado com o obtido no site do distribuidor do arquivo que queremos verificar. Basta copiar e colar no prompt do PowerShell o hash original diretamente do próprio site, chamar o método equals() e passar como parâmetro para esse método o valor de hash contido no arquivo que acabamos de gerar (basta copiar e colar também):

Hash MD5 da iso do Debian Linux - Windows PowerShell

Copiando o Hash MD5 da iso do Debian Linux para verificação no Windows PowerShell

Não se esqueça das aspas, pois se trata de uma comparação entre duas strings. O valor “1” após a vírgula no segundo parâmetro passado ao método indica que a comparação deve ser feita ignorando o caso (não diferenciando maiúsculas de minúsculas). Se quiser fazer essa diferenciação, omita o segundo parâmetro do método. Execute o comando como segue:

"b3cd3e2e6a74b93ab41059c47c2b43fd".equals("B3CD3E2E6A74B93AB41059C47C2B43FD",1)

Cuidado com espaços no início e final da linha, pois podem comprometer toda a verificação. O resultado será True se ambas as strings forem idênticas, e False se houver diferença entre elas (ou seja, se os hashes forem diferentes). Veja o resultado obtido a seguir:

Método equals no Windows Powershell - Comparando hashes MD5

Veja que em nosso caso o resultado foi True, evidenciando que o arquivo baixado está íntegro, pois seu hash é idêntico ao fornecido no site do desenvolvedor / distribuidor.

Obviamente poderíamos fazer a comparação dos hashes visualmente, lendo caractere por caractere, mas usando o método equals() podemos efetuar a comparação mais rapidamente, sem o perigo de cometer erros, e além disso o método pode ser utilizado em script para automatizar esse tipo de tarefa.

Abaixo temos a lista de algoritmos suportados pelo cmdlet Get-FileHash:

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MACTripleDES
  • MD5
  • RIPEMD160

É isso aí! Até o próximo tutorial de Windows PowerShell!

Sobre Fábio dos Reis (1223 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

1 Comentário em Verificando integridade de arquivos por meio de hashes via PowerShell

  1. Fabiano Gomes // 27/06/2017 em 11:04 // Responder

    Bom dia metre, conheci suas aulas pelo youtube, sou grande admirador do seu trabalho. Quero ter um treinamento sobre redes e continuar estudando outros cursos da sua plataforma. Quero desde já parabenizar e ser um parceiro colaborador

Escreva um comentário

Seu e-mail não será divulgado


*