Compartir a través de


Get-FileHash

Calcula el valor hash de un archivo mediante un algoritmo hash especificado.

Sintaxis

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

Description

El cmdlet Get-FileHash calcula el valor hash de un archivo mediante un algoritmo hash especificado. Un valor hash es un valor único que corresponde al contenido del archivo. En lugar de identificar el contenido de un archivo por su nombre de archivo, extensión u otra designación, un hash asigna un valor único al contenido de un archivo. Los nombres de archivo y las extensiones se pueden cambiar sin modificar el contenido del archivo y sin cambiar el valor hash. Del mismo modo, el contenido del archivo se puede cambiar sin cambiar el nombre o la extensión. Sin embargo, cambiar incluso un solo carácter en el contenido de un archivo cambia el valor hash del archivo.

El propósito de los valores hash es proporcionar una manera criptográficamente segura de comprobar que no se ha cambiado el contenido de un archivo. Aunque algunos algoritmos hash, incluidos MD5 y SHA1, ya no se consideran seguros contra ataques, el objetivo de un algoritmo hash seguro es hacer imposible cambiar el contenido de un archivo (ya sea por accidente o por intentos malintencionados o no autorizados) y mantener el mismo valor hash. También puede usar valores hash para determinar si dos archivos diferentes tienen exactamente el mismo contenido. Si los valores hash de dos archivos son idénticos, el contenido de los archivos también es idéntico.

De forma predeterminada, el cmdlet Get-FileHash usa el algoritmo SHA256, aunque se puede usar cualquier algoritmo hash compatible con el sistema operativo de destino.

Ejemplos

Ejemplo 1: Calcular el valor hash de un archivo

En este ejemplo se usa el cmdlet Get-FileHash para calcular el valor hash del archivo /etc/apt/sources.list. El algoritmo hash usado es el valor predeterminado, SHA256. La salida se canaliza al cmdlet Format-List para dar formato a la salida como una lista.

Get-FileHash /etc/apt/sources.list | Format-List

Algorithm : SHA256
Hash      : 3CBCFDDEC145E3382D592266BE193E5BE53443138EE6AB6CA09FF20DF609E268
Path      : /etc/apt/sources.list

Ejemplo 2: Calcular el valor hash de un archivo ISO

En este ejemplo se usa el cmdlet Get-FileHash y el algoritmo de SHA384 para calcular el valor hash de un archivo ISO que un administrador ha descargado de Internet. La salida se canaliza al cmdlet Format-List para dar formato a la salida como una 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

Ejemplo 3: Cálculo del valor hash de una secuencia

En este ejemplo, se usa System.Net.WebClient para descargar un paquete de la página de versión de PowerShell. La página de versión también documenta el hash SHA256 de cada archivo de paquete. Podemos comparar el valor hash publicado con el que calculamos con 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

Ejemplo 4: Calcular el hash de una cadena

PowerShell no proporciona un cmdlet para calcular el hash de una cadena. Sin embargo, puede escribir una cadena en una secuencia y usar el parámetro InputStream de Get-FileHash para obtener el valor 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 la función hash criptográfica que se va a usar para calcular el valor hash del contenido del archivo o secuencia especificados. Una función hash criptográfica tiene la propiedad que es inviable buscar dos archivos diferentes con el mismo valor hash. Las funciones hash se usan normalmente con firmas digitales y para la integridad de los datos. Los valores aceptables para este parámetro son:

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MD5

Si no se especifica ningún valor o si se omite el parámetro, el valor predeterminado es SHA256.

Por motivos de seguridad, MD5 y SHA1, que ya no se consideran seguros, solo deben usarse para la validación de cambios simple y no deben usarse para generar valores hash para los archivos que requieren protección contra ataques o alteraciones.

Tipo:String
Valores aceptados:SHA1, SHA256, SHA384, SHA512, MD5
Posición:1
Valor predeterminado:SHA256
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-InputStream

Especifica el flujo de entrada.

Tipo:Stream
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-LiteralPath

Especifica la ruta de acceso a un archivo. A diferencia del parámetro Path, el valor del parámetro LiteralPath se usa exactamente como se escribe. No se interpreta ningún carácter comodín. Si la ruta de acceso incluye caracteres de escape, incluya la ruta de acceso entre comillas simples. Las comillas simples indican a PowerShell que no interprete caracteres como secuencias de escape.

Tipo:String[]
Alias:PSPath, LP
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-Path

Especifica la ruta de acceso a uno o varios archivos como una matriz. Se permiten caracteres comodín.

Tipo:String[]
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:True

Entradas

String

Puede canalizar una cadena que contiene una ruta de acceso a un archivo a este cmdlet.

Salidas

Microsoft.PowerShell.Utility.FileHash

Este cmdlet devuelve un objeto que representa la ruta de acceso al archivo especificado, el valor del hash calculado y el algoritmo utilizado para calcular el hash.