Get-FileHash
Calcula el valor hash de un archivo usando 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 Get-FileHash
cmdlet calcula el valor hash de un archivo mediante un algoritmo hash especificado.
Un valor hash es un valor único que se corresponde con el contenido del archivo. Más que identificar el contenido de un archivo por su nombre de archivo, extensión u otra designación, lo que un hash hace es asignar un valor único al contenido de un archivo. Los nombres y extensiones de archivo se pueden cambiar sin alterar el contenido del archivo y sin modificar el valor hash. Del mismo modo, el contenido del archivo se puede cambiar sin cambiar el nombre o la extensión. Sin embargo, cambiar tan solo un carácter en el contenido de un archivo hace que el valor hash del archivo se modifique.
El propósito de los valores hash consiste en ofrecer una protección criptográfica para comprobar que el contenido de un archivo no ha cambiado. 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. Los valores hash también sirven para saber si dos archivos tienen exactamente el mismo contenido. Si los valores hash de dos archivos son idénticos, el contenido de esos archivos también lo será.
De forma predeterminada, el Get-FileHash
cmdlet 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 Get-FileHash
cmdlet para calcular el valor hash del /etc/apt/sources.list
archivo. El algoritmo hash usado es el valor predeterminado, SHA256. La salida se canaliza al Format-List
cmdlet 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 Get-FileHash
cmdlet y el algoritmo SHA384 para calcular el valor hash de un archivo ISO que un administrador ha descargado de Internet. La salida se canaliza al Format-List
cmdlet 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 desde 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 en tareas de integridad de datos. Los valores permitidos para este parámetro son los siguientes:
- 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, se deben usar única y exclusivamente para la validación de cambios sencillos, y no para generar valores hash de los archivos que requieren protección frente a 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. Ningún carácter se interpreta como carácter comodín. Si la ruta de acceso contiene caracteres de escape, escríbala 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 permite el uso de 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
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.