Você precisa verificar a integridade de um arquivo baixado ou conferir uma soma de verificação no Windows 11. O PowerShell oferece uma forma nativa de calcular hashes SHA-256 sem instalar ou importar módulos externos. Este artigo explica como usar o cmdlet Get-FileHash e as classes .NET subjacentes para gerar hashes SHA-256 diretamente da linha de comando. Você aprenderá os comandos exatos, entenderá como funcionam e evitará erros comuns que produzem valores de hash incorretos.
Principais Conclusões: Calcular Hash SHA-256 no PowerShell no Windows 11
- Get-FileHash -Algorithm SHA256 -Path <arquivo>: O cmdlet nativo do PowerShell para calcular o hash SHA-256 de qualquer arquivo sem precisar de módulo
- Método [System.Security.Cryptography.SHA256]::Create().ComputeHash(): A classe .NET que o PowerShell pode chamar diretamente para cenários avançados, como hash de strings ou streaming de dados
- Conversão Format-Hex ou ToString: Necessária para converter a saída bruta de bytes dos métodos .NET na string hexadecimal padrão do hash
Entendendo o SHA-256 e as Capacidades Nativas do PowerShell
SHA-256 é uma função hash criptográfica que produz um valor hash de 256 bits (32 bytes). Faz parte da família SHA-2 e é amplamente usado para verificação de integridade de arquivos, assinaturas digitais e armazenamento de senhas. O Windows 11 inclui suporte a SHA-256 no .NET Framework, que o PowerShell pode acessar sem downloads adicionais.
O PowerShell versão 4.0 e posteriores incluem o cmdlet Get-FileHash. Esse cmdlet usa as classes criptográficas .NET internamente. Você não precisa importar um módulo como Microsoft.PowerShell.Utility explicitamente, pois ele é carregado por padrão no PowerShell 5.1 e PowerShell 7.x. O cmdlet suporta vários algoritmos: SHA1, SHA256, SHA384, SHA512, MD5 e RIPEMD160. SHA256 é o algoritmo padrão do Get-FileHash em algumas versões do PowerShell, mas é recomendável especificá-lo explicitamente para clareza.
Para cenários em que você precisa fazer hash de uma string em vez de um arquivo, ou quando deseja mais controle sobre o processo de hash, o PowerShell pode chamar a classe .NET System.Security.Cryptography.SHA256 diretamente. Esse método também dispensa módulos, pois as classes .NET fazem parte da biblioteca base do Windows.
Passos para Calcular o Hash SHA-256 Usando Get-FileHash
O cmdlet Get-FileHash é a forma mais simples e confiável de calcular o hash SHA-256 de um arquivo. Siga estes passos.
- Abra o PowerShell como Administrador ou Usuário Padrão
Pressione a tecla Windows, digite PowerShell e selecione Windows PowerShell ou PowerShell 7. Você não precisa de privilégios de administrador para calcular o hash de arquivos que pode ler. - Navegue até o Diretório do Arquivo (Opcional)
Use o comandocdpara mudar para a pasta que contém o arquivo. Por exemplo:cd C:\Users\SeuNome\Downloads. Essa etapa simplifica o caminho do arquivo no próximo comando. - Execute Get-FileHash com o Algoritmo SHA256
Digite o seguinte comando e pressione Enter:Get-FileHash -Algorithm SHA256 -Path "arquivo.exe"
Substituaarquivo.exepelo nome real do arquivo. Se o arquivo não estiver no diretório atual, forneça o caminho completo:C:\Caminho\Para\arquivo.iso. - Leia a Saída
O PowerShell exibe três colunas: Algorithm mostra SHA256, Hash mostra a string hexadecimal de 64 caracteres e Path mostra o caminho do arquivo. Compare o valor do hash com a soma de verificação fornecida pela fonte do arquivo. - Hash de Vários Arquivos de Uma Vez
Você pode passar vários caminhos de arquivo para o mesmo comando:Get-FileHash -Algorithm SHA256 -Path "arquivo1.zip", "arquivo2.zip"
O PowerShell retorna um hash para cada arquivo em uma linha separada.
Passos para Calcular o Hash SHA-256 Usando Classes .NET Sem Get-FileHash
Use este método quando precisar fazer hash de uma string, dados de um stream ou trabalhar em um ambiente onde Get-FileHash não está disponível. A abordagem .NET oferece controle total sobre a entrada e o formato de saída.
- Crie um Objeto SHA256
Digite o seguinte comando para criar uma instância da classe SHA256:$sha256 = [System.Security.Cryptography.SHA256]::Create()
Este comando não requer importação de módulo. - Calcule o Hash de uma String
Converta a string em bytes, calcule o hash e converta o resultado em hexadecimal:$stringBytes = [System.Text.Encoding]::UTF8.GetBytes("SuaString")$hashBytes = $sha256.ComputeHash($stringBytes)$hashHex = [System.BitConverter]::ToString($hashBytes) -replace '-', ''$hashHex
A variável$hashHexagora contém o hash SHA-256 como uma string hexadecimal de 64 caracteres em maiúsculas. - Calcule o Hash de um Arquivo Usando .NET
Abra um stream de arquivo e calcule seu hash:$stream = [System.IO.File]::OpenRead("C:\Caminho\Para\arquivo.exe")$hashBytes = $sha256.ComputeHash($stream)$stream.Close()$hashHex = [System.BitConverter]::ToString($hashBytes) -replace '-', ''$hashHex
Sempre feche o stream para liberar recursos do sistema. - Descarte o Objeto SHA256
Após calcular todos os hashes necessários, descarte o objeto:$sha256.Dispose()
Esta etapa libera recursos criptográficos.
Erros Comuns e O que Evitar
PowerShell Mostra um Hash Diferente do Esperado
A causa mais frequente é usar o algoritmo errado. Alguns sites fornecem hashes MD5 ou SHA-1. Verifique se a fonte especifica SHA-256. Além disso, certifique-se de comparar o hash completo de 64 caracteres. Hashes truncados ou parciais não corresponderão.
Comando Get-FileHash Não Encontrado
Esse erro ocorre em versões muito antigas do PowerShell (3.0 ou anteriores). O Windows 11 vem com PowerShell 5.1, que inclui Get-FileHash. Se você estiver usando PowerShell 7, o cmdlet também está presente. Execute $PSVersionTable.PSVersion para verificar sua versão. Se vir versão 3.0 ou inferior, use o método da classe .NET.
Saída do Hash em Maiúsculas ou Minúsculas
O cmdlet Get-FileHash retorna o hash em maiúsculas. O método .NET usando BitConverter também retorna maiúsculas. Muitas fontes de soma de verificação exibem minúsculas. A caixa não afeta o valor do hash. Use .ToLower() para converter, se necessário: $hashHex.ToLower().
Hash de uma String Difere Entre Sistemas
O hash depende da codificação de bytes da string. Sempre especifique a codificação explicitamente. O exemplo acima usa UTF8. Se usar ASCII ou Unicode, o hash será diferente. Corresponda à codificação usada pelo sistema que gerou o hash original.
Caminho do Arquivo Contém Espaços ou Caracteres Especiais
Sempre coloque os caminhos de arquivo entre aspas. O PowerShell interpreta espaços como separadores de argumentos. Use aspas simples 'C:\Meus Arquivos\arquivo.txt' ou aspas duplas "C:\Meus Arquivos\arquivo.txt".
Get-FileHash vs Método da Classe .NET: Diferenças de Uso
| Item | Cmdlet Get-FileHash | Classe .NET SHA256 |
|---|---|---|
| Tipo de entrada | Apenas caminho de arquivo | Array de bytes, stream ou string |
| Formato de saída | Objeto com Algorithm, Hash, Path | Array de bytes bruto |
| Facilidade de uso | Comando único, sem conversão necessária | Várias etapas, requer conversão hexadecimal |
| Exigência de módulo | Nenhum (integrado ao PowerShell 5.1+) | Nenhum (.NET faz parte do Windows) |
| Desempenho em arquivos grandes | Bom, usa streaming internamente | Bom, mas você precisa gerenciar o stream |
Use Get-FileHash para verificações rápidas de integridade de arquivos. Use a classe .NET quando precisar fazer hash de strings ou controlar a codificação e o processo de streaming.
Agora você pode calcular hashes SHA-256 no PowerShell no Windows 11 sem importar módulos. Use Get-FileHash -Algorithm SHA256 para arquivos e a classe .NET SHA256 para strings ou cenários avançados. Sempre verifique se o algoritmo e a codificação correspondem à fonte. Para scripts automatizados, considere adicionar -replace '-' ao método .NET para produzir hashes em minúsculas de forma consistente.