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:
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):
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:
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!
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