Get-FileHash
Calcula o valor hash de um ficheiro através de um determinado algoritmo hash.
Sintaxe
Get-FileHash
[-Path] <String[]>
[[-Algorithm] <String>]
[<CommonParameters>]
Get-FileHash
[-LiteralPath] <String[]>
[[-Algorithm] <String>]
[<CommonParameters>]
Get-FileHash
[-InputStream] <Stream>
[[-Algorithm] <String>]
[<CommonParameters>]
Description
O cmdlet Get-FileHash
calcula o valor do hash para um ficheiro através de um algoritmo hash especificado.
Um valor hash é um valor exclusivo que corresponde ao conteúdo do ficheiro. Em vez de identificar o conteúdo de um ficheiro pelo seu nome de ficheiro, extensão ou outra designação, um hash atribui um valor exclusivo ao conteúdo de um ficheiro. Os nomes e extensões dos ficheiros podem ser alterados sem alterar o conteúdo do ficheiro e sem alterar o valor hash. Da mesma forma, o conteúdo do arquivo pode ser alterado sem alterar o nome ou a extensão. No entanto, ao alterar apenas um único caráter no conteúdo de um ficheiro, o valor hash do ficheiro será alterado.
O objetivo dos valores hash é fornecer uma forma criptograficamente segura de verificar se o conteúdo de um ficheiro não foi alterado. Embora alguns algoritmos hash, incluindo o MD5 e o SHA1, já não sejam considerados seguros contra o ataque, o objetivo de um algoritmo hash seguro é tornar impossível alterar os conteúdos de um ficheiro, seja por acidente, ou por tentativa não autorizada ou maliciosa, e manter o mesmo valor hash. Também pode utilizar valores hash para determinar se dois ficheiros diferentes têm exatamente o mesmo conteúdo. Se os valores hash de dois ficheiros forem idênticos, o conteúdo dos ficheiros também é idêntico.
Por predefinição, o cmdlet Get-FileHash
utiliza o algoritmo SHA256, embora qualquer algoritmo hash que seja suportado pelo sistema operativo de destino possa ser utilizado.
Exemplos
Exemplo 1: calcular o valor do hash para um ficheiro
Este exemplo utiliza o cmdlet Get-FileHash
para calcular o valor do hash para o ficheiro /etc/apt/sources.list
. O algoritmo hash utilizado é a predefinição SHA256. A saída é canalizada para o Format-List
cmdlet para formatar a saída como uma lista.
Get-FileHash /etc/apt/sources.list | Format-List
Algorithm : SHA256
Hash : 3CBCFDDEC145E3382D592266BE193E5BE53443138EE6AB6CA09FF20DF609E268
Path : /etc/apt/sources.list
Exemplo 2: calcular o valor do hash para um ficheiro ISO
Este exemplo utiliza o cmdlet Get-FileHash
e o algoritmo SHA384 para calcular o valor hash para um ficheiro ISO que um administrador transferiu a partir 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 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 do 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
O PowerShell não fornece um cmdlet para calcular o hash de uma cadeia. No entanto, pode escrever uma cadeia num fluxo e utilizar o parâmetro InputStream de Get-FileHash
para obter o valor do 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 do hash criptográfico a utilizar para calcular o valor do hash do conteúdo do ficheiro ou fluxo especificado. Uma função do hash criptográfico tem a propriedade de que é inviável encontrar dois ficheiros diferentes com o mesmo valor hash. As funções hash são comumente utilizadas com assinaturas digitais e para a integridade dos dados. Os valores aceitáveis para este parâmetro são:
- SHA1
- SHA256
- SHA384
- SHA512
- MD5
Se nenhum valor for especificado ou se o parâmetro for omitido, o valor padrão será SHA256.
Por motivos de segurança, MD5 e SHA1, que já não são considerados seguros, devem ser utilizados apenas para validação de alterações simples, e não devem ser utilizados para gerar valores hash para ficheiros que exijam proteção contra ataques ou adulteração.
Tipo: | String |
Valores aceites: | SHA1, SHA256, SHA384, SHA512, MD5 |
Position: | 1 |
Default value: | SHA256 |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-InputStream
Especifica o fluxo de entrada.
Tipo: | Stream |
Position: | 0 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | 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 caracteres curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. As aspas simples instruem o PowerShell a não interpretar caracteres como sequências de escape.
Tipo: | String[] |
Aliases: | PSPath, LP |
Position: | 0 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-Path
Especifica o caminho para um ou mais arquivos como uma matriz. Caracteres curinga são permitidos.
Tipo: | String[] |
Position: | 0 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | True |
Entradas
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 computado e o algoritmo usado para calcular o hash.