Compartilhar via


Get-FileHash

Calcula o valor de hash para um arquivo utilizando um algoritmo de hash especificado.

Sintaxe

Get-FileHash
   [-Path] <String[]>
   [-Algorithm <String>]
   [<CommonParameters>]
Get-FileHash
   -LiteralPath <String[]>
   [-Algorithm <String>]
   [<CommonParameters>]
Get-FileHash
   -InputStream <Stream>
   [-Algorithm <String>]
   [<CommonParameters>]

Description

O Get-FileHash cmdlet calcula o valor de hash de um arquivo usando um algoritmo de hash especificado. Um valor de hash é um valor exclusivo que corresponde ao conteúdo do arquivo. Em vez de identificar o conteúdo de um arquivo por seu nome, extensão ou outra designação, um hash atribui um valor exclusivo para o conteúdo de um arquivo. Extensões e nomes de arquivo podem ser alterados sem alterar o conteúdo do arquivo e sem alterar o valor de hash. Da mesma forma, o conteúdo do arquivo pode ser alterado sem alterar o nome ou a extensão. No entanto, até mesmo um único caractere no conteúdo de um arquivo altera o valor de hash do arquivo.

A finalidade dos valores de hash é fornecer uma maneira de proteger criptograficamente para verificar se o conteúdo de um arquivo não foi alterado. Embora alguns algoritmos de hash, incluindo MD5 e SHA1, não sejam mais considerados seguros contra ataques, o objetivo de um algoritmo de hash seguro é impossibilitar a alteração do conteúdo de um arquivo - seja por acidente ou por tentativa maliciosa ou não autorizada - e manter o mesmo valor de hash. Também é possível utilizar os valores de hash para determinar se dois arquivos diferentes têm exatamente o mesmo conteúdo. Se os valores de hash de dois arquivos forem idênticos, o conteúdo dos arquivos também é idêntico.

Por padrão, o Get-FileHash cmdlet usa o algoritmo SHA256, embora qualquer algoritmo de hash compatível com o sistema operacional de destino possa ser usado.

Exemplos

Exemplo 1: Calcular o valor de hash de um arquivo

Este exemplo usa o Get-FileHash cmdlet para calcular o valor de hash do Powershell.exe arquivo. O algoritmo de hash utilizado é o padrão, SHA256. A saída é canalizada para o Format-List cmdlet para formatar a saída como uma lista.

Get-FileHash $PSHOME\powershell.exe | Format-List

Algorithm : SHA256
Hash      : 908B64B1971A979C7E3E8CE4621945CBA84854CB98D76367B791A6E22B5F6D53
Path      : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Exemplo 2: Calcular o valor de hash para um arquivo ISO

Este exemplo usa o Get-FileHash cmdlet e o algoritmo SHA384 para calcular o valor de hash de um arquivo ISO que um administrador baixou da Internet. A saída é canalizada para o Format-List cmdlet para formatar a saída como uma lista.

Get-FileHash C:\Users\user1\Downloads\Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List

Algorithm : SHA384
Hash      : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3
Path      : C:\Users\user1\Downloads\Contoso8_1_ENT.iso

Exemplo 3: Calcular o valor de hash de um fluxo

Para este exemplo, estamos usando System.Net.WebClient para baixar um pacote da página de lançamento do Powershell. A página de lançamento também documenta o hash SHA256 de cada arquivo de pacote. Podemos comparar o valor de hash publicado com o que calculamos com Get-FileHash.

$wc = [System.Net.WebClient]::new()
$pkgurl = 'https://github.com/PowerShell/PowerShell/releases/download/v6.2.4/powershell_6.2.4-1.debian.9_amd64.deb'
$publishedHash = '8E28E54D601F0751922DE24632C1E716B4684876255CF82304A9B19E89A9CCAC'
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash

True

Exemplo 4: Calcular o hash de uma cadeia de caracteres

O PowerShell não fornece um cmdlet para calcular o hash de uma cadeia de caracteres. No entanto, você pode gravar uma cadeia de caracteres em um fluxo e usar o parâmetro InputStream de para obter o valor de Get-FileHash hash.

$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("Hello world")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream | Select-Object Hash

Hash
----
64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C

Parâmetros

-Algorithm

Especifica a função de hash criptográfica a ser usada para calcular o valor de hash do conteúdo do arquivo ou fluxo especificado. Uma função de hash criptográfica tem a propriedade de que é inviável encontrar dois arquivos diferentes com o mesmo valor de hash. As funções de hash são utilizadas com assinaturas digitais e integridade dos dados. Os valores aceitáveis para esse parâmetro são:

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

Se nenhum valor for especificado, ou se o parâmetro for omitido, o valor padrão é SHA256.

Por motivos de segurança, MD5 e SHA1, que não são considerados seguros, devem ser utilizados somente para validação de alteração simples e não devem ser utilizados para gerar valores de hash para arquivos que exigem proteção contra ataque ou violação.

Tipo:String
Valores aceitos:SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5, RIPEMD160
Cargo:Named
Valor padrão:SHA256
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-InputStream

Especifica o fluxo de entrada.

Tipo:Stream
Cargo:Named
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-LiteralPath

Especifica o caminho para um arquivo. Ao contrário do parâmetro Path , o valor do parâmetro LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como caractere curinga. Se o caminho incluir caracteres de escape, coloque o caminho entre aspas. Aspas simples instruem o PowerShell a não interpretar caracteres como sequências de escape.

Tipo:String[]
Aliases:PSPath
Cargo:Named
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-Path

Especifica o caminho para um ou mais arquivos como uma matriz. Caracteres curinga são permitidos.

Tipo:String[]
Cargo:0
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:True

Entradas

String

Você pode canalizar uma cadeia de caracteres contendo um caminho para um arquivo para esse cmdlet.

Saídas

Microsoft.PowerShell.Utility.FileHash

Esse cmdlet retorna um objeto que representa o caminho para o arquivo especificado, o valor do hash calculado e o algoritmo usado para calcular o hash.