Necesita verificar la integridad de un archivo descargado o comprobar una suma de comprobación en Windows 11. PowerShell ofrece una forma integrada de calcular hashes SHA-256 sin instalar ni importar módulos externos. Este artículo explica cómo usar el cmdlet nativo Get-FileHash y las clases .NET subyacentes para generar hashes SHA-256 directamente desde la línea de comandos. Aprenderá los comandos exactos, comprenderá cómo funcionan y evitará errores comunes que producen valores de hash incorrectos.
Puntos clave: Calcular el hash SHA-256 en PowerShell en Windows 11
- Get-FileHash -Algorithm SHA256 -Path
: El cmdlet nativo de PowerShell para calcular un hash SHA-256 de cualquier archivo sin necesidad de un módulo - [System.Security.Cryptography.SHA256]::Create().ComputeHash() method: La clase .NET que PowerShell puede llamar directamente para escenarios avanzados, como calcular el hash de cadenas o transmitir datos
- Format-Hex o conversión ToString: Necesario para convertir la salida de bytes sin procesar de los métodos .NET en la cadena de hash hexadecimal estándar
Comprender SHA-256 y las capacidades nativas de PowerShell
SHA-256 es una función hash criptográfica que produce un valor hash de 256 bits (32 bytes). Forma parte de la familia SHA-2 y se usa ampliamente para la verificación de integridad de archivos, firmas digitales y almacenamiento de contraseñas. Windows 11 incluye compatibilidad con SHA-256 en .NET Framework, a la que PowerShell puede acceder sin descargas adicionales.
PowerShell versión 4.0 y posteriores incluyen el cmdlet Get-FileHash. Este cmdlet usa las clases criptográficas de .NET en segundo plano. No necesita importar un módulo como Microsoft.PowerShell.Utility explícitamente porque se carga de forma predeterminada en PowerShell 5.1 y PowerShell 7.x. El cmdlet admite varios algoritmos: SHA1, SHA256, SHA384, SHA512, MD5 y RIPEMD160. SHA256 es el algoritmo predeterminado para Get-FileHash en algunas versiones de PowerShell, pero debe especificarlo explícitamente para mayor claridad.
Para escenarios en los que necesita calcular el hash de una cadena en lugar de un archivo, o en los que desea más control sobre el proceso de hash, PowerShell puede llamar directamente a la clase System.Security.Cryptography.SHA256 de .NET. Este método tampoco requiere módulos porque las clases .NET forman parte de la biblioteca de clases base de Windows.
Pasos para calcular el hash SHA-256 con Get-FileHash
El cmdlet Get-FileHash es la forma más sencilla y confiable de calcular un hash SHA-256 de un archivo. Siga estos pasos.
- Abra PowerShell como administrador o usuario estándar
Presione la tecla Windows, escriba PowerShell y seleccione Windows PowerShell o PowerShell 7. No necesita privilegios de administrador para calcular el hash de archivos que puede leer. - Navegue al directorio del archivo (opcional)
Use el comandocdpara cambiar a la carpeta que contiene el archivo. Por ejemplo:cd C:\Users\YourName\Downloads. Este paso simplifica la ruta del archivo en el siguiente comando. - Ejecute Get-FileHash con el algoritmo SHA256
Escriba el siguiente comando y presione Entrar:Get-FileHash -Algorithm SHA256 -Path "filename.exe"
Reemplacefilename.execon el nombre real del archivo. Si el archivo no está en el directorio actual, proporcione la ruta completa:C:\Path\To\file.iso. - Lea la salida
PowerShell muestra tres columnas: Algorithm muestra SHA256, Hash muestra la cadena hexadecimal de 64 caracteres y Path muestra la ruta del archivo. Compare el valor de hash con la suma de comprobación proporcionada por la fuente del archivo. - Calcule el hash de varios archivos a la vez
Puede pasar varias rutas de archivo al mismo comando:Get-FileHash -Algorithm SHA256 -Path "file1.zip", "file2.zip"
PowerShell devuelve un hash para cada archivo en una fila separada.
Pasos para calcular el hash SHA-256 con clases .NET sin Get-FileHash
Use este método cuando necesite calcular el hash de una cadena, calcular el hash de datos de una secuencia o trabajar en un entorno donde Get-FileHash no esté disponible. El enfoque de .NET le brinda control total sobre el formato de entrada y salida.
- Cree un objeto SHA256
Escriba el siguiente comando para crear una instancia de la clase SHA256:$sha256 = [System.Security.Cryptography.SHA256]::Create()
Este comando no requiere importar ningún módulo. - Calcule el hash de una cadena
Convierta la cadena en bytes, calcule el hash y convierta el resultado a hexadecimal:$stringBytes = [System.Text.Encoding]::UTF8.GetBytes("YourString")$hashBytes = $sha256.ComputeHash($stringBytes)$hashHex = [System.BitConverter]::ToString($hashBytes) -replace '-', ''$hashHex
La variable$hashHexahora contiene el hash SHA-256 como una cadena hexadecimal en mayúsculas de 64 caracteres. - Calcule el hash de un archivo con .NET
Abra una secuencia de archivo y calcule su hash:$stream = [System.IO.File]::OpenRead("C:\Path\To\file.exe")$hashBytes = $sha256.ComputeHash($stream)$stream.Close()$hashHex = [System.BitConverter]::ToString($hashBytes) -replace '-', ''$hashHex
Cierre siempre la secuencia para liberar recursos del sistema. - Deseche el objeto SHA256
Después de calcular todos los hashes necesarios, deseche el objeto:$sha256.Dispose()
Este paso libera recursos criptográficos.
Errores comunes y cosas que debe evitar
PowerShell muestra un hash diferente al esperado
La causa más frecuente es usar el algoritmo incorrecto. Algunos sitios web proporcionan hashes MD5 o SHA-1. Verifique que la fuente indique específicamente SHA-256. Además, asegúrese de comparar el hash completo de 64 caracteres. Los hashes truncados o parciales no coincidirán.
No se encuentra el comando Get-FileHash
Este error ocurre en versiones muy antiguas de PowerShell 3.0 o anteriores. Windows 11 incluye PowerShell 5.1, que incluye Get-FileHash. Si usa PowerShell 7, el cmdlet también está presente. Ejecute $PSVersionTable.PSVersion para comprobar su versión. Si ve la versión 3.0 o inferior, use el método de clase .NET en su lugar.
La salida del hash está en mayúsculas o minúsculas
El cmdlet Get-FileHash devuelve el hash en mayúsculas. El método .NET que usa BitConverter también devuelve mayúsculas. Muchas fuentes de sumas de comprobación muestran minúsculas. Las mayúsculas y minúsculas no afectan el valor del hash. Use .ToLower() para convertir si es necesario: $hashHex.ToLower().
El hash de una cadena difiere entre sistemas
El hash depende de la codificación de bytes de la cadena. Especifique siempre la codificación explícitamente. El ejemplo anterior usa UTF8. Si usa ASCII o Unicode, el hash será diferente. Coincida con la codificación usada por el sistema que generó el hash original.
La ruta del archivo contiene espacios o caracteres especiales
Escriba siempre las rutas de archivo entre comillas. PowerShell interpreta los espacios como separadores de argumentos. Use comillas simples 'C:\My Files\file.txt' o comillas dobles "C:\My Files\file.txt".
Get-FileHash frente al método de clase .NET: diferencias de uso
| Elemento | Cmdlet Get-FileHash | Clase SHA256 de .NET |
|---|---|---|
| Tipo de entrada | Solo ruta de archivo | Matriz de bytes, secuencia o cadena |
| Formato de salida | Objeto con Algorithm, Hash, Path | Matriz de bytes sin procesar |
| Facilidad de uso | Un solo comando, no se necesita conversión | Varios pasos, requiere conversión hexadecimal |
| Requisito de módulo | Ninguno, integrado en PowerShell 5.1+ | Ninguno, .NET forma parte de Windows |
| Rendimiento con archivos grandes | Bueno, usa transmisión internamente | Bueno, pero debe administrar la secuencia |
Use Get-FileHash para verificaciones rápidas de integridad de archivos. Use la clase .NET cuando necesite calcular el hash de cadenas o controlar la codificación y el proceso de transmisión.
Ahora puede calcular hashes SHA-256 en PowerShell en Windows 11 sin importar ningún módulo. Use Get-FileHash -Algorithm SHA256 para archivos y la clase SHA256 de .NET para cadenas o escenarios avanzados. Verifique siempre que el algoritmo y la codificación coincidan con la fuente. Para scripts automatizados, considere agregar un -replace '-' al método .NET para producir hashes en minúsculas de forma consistente.