Cómo obtener el checksum MD5 en PowerShell
- Uso del Algoritmo de Hashing MD5 en PowerShell
-
Uso de la Clase
[System.Security.Cryptography.MD5]
en PowerShell -
Uso de la Clase
MD5CryptoServiceProvider
en PowerShell - Conclusión

Cuando se trata de garantizar la integridad y seguridad de los datos en PowerShell, el algoritmo de hashing MD5 sigue siendo una herramienta valiosa a pesar de su relevancia decreciente en contextos de seguridad. Aunque no se recomienda para propósitos criptográficos debido a vulnerabilidades, MD5 sigue siendo útil para verificar transferencias de archivos y detectar manipulaciones.
Aprovechando las capacidades de PowerShell, exploramos varios métodos para calcular sumas de verificación MD5, proporcionando información sobre enfoques tanto fundamentales como avanzados.
Uso del Algoritmo de Hashing MD5 en PowerShell
Aun cuando MD5 no se recomienda para seguridad, sigue siendo una solución excelente para comprobar si una transferencia de archivo ha sido manipulada o ha sido exitosa.
Primero, obtenga la huella digital MD5 del archivo antes y después de la transferencia.
Si resulta en el mismo valor, la transferencia de archivo no ha sido manipulada. Si no, está corrupta.
Para hacer esto, utilizaremos el cmdlet Get-FileHash
. El cmdlet Get-FileHash
muestra el valor hash de un archivo.
Utiliza el algoritmo SHA256
por defecto, pero podemos agregar un parámetro adicional para usar MD5
.
Get-FileHash [-Path] <file> [[-Algorithm] <algo>] [Options]
-Algorithm
: Especifica el algoritmo hash a usar. En este caso, usamosMD5
.-Path
: Especifica la ruta al archivo para el cual desea calcular el valor hash.
También podemos usarlo con un flujo en lugar de una ruta de archivo.
Get-FileHash [-InputStream] <stream> [[-Algorithm] <algo>] [Options]
-
[-InputStream] <stream>
: Especifica el flujo de entrada para el cálculo del hash, que por defecto es el archivo especificado por-Path
. -
[[-Algorithm] <algo>]
: Especifica el algoritmo hash (por ejemplo,MD5
,SHA1
) a utilizar. -
[Options]
: Configuraciones adicionales como-Path
,-LiteralPath
,-Force
, etc., para personalización y manejo de errores.
Aquí hay un ejemplo:
Get-FileHash -Path "path\example.txt" -Algorithm MD5
En este código, utilizamos el cmdlet Get-FileHash
para calcular la suma de verificación MD5 del archivo ubicado en "C:\Path\To\File.txt"
. El cmdlet calcula automáticamente el valor hash MD5 para el archivo especificado.
Salida:
El argumento -Path
no es obligatorio, por lo que no necesitamos usarlo. En su lugar, damos la ruta del archivo y agregamos el parámetro de algoritmo para usar MD5
en lugar de SHA256
.
Usando PowerShell en un script, podemos crear una variable con el resultado y obtener el valor hash con la propiedad hash como $variable.Hash
para asegurarnos de que sea el mismo valor que el archivo original.
Hashing de Cadenas en PowerShell
Desafortunadamente, no hay una función directa o comandos nativos para generar un hash de una cadena en PowerShell.
Sin embargo, es posible usar Get-FileHash
con un parámetro de flujo, por lo que es una solución para calcular el hash de una cadena.
Comencemos directamente con el fragmento a continuación:
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("MD5Online")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream -Algorithm MD5
En este fragmento de código, creamos un objeto MemoryStream
$stringAsStream
e inicializamos un StreamWriter $writer
para escribir la cadena MD5Online
en el flujo. Luego, vaciamos el escritor para asegurarnos de que los datos se escriban en el flujo.
Después de establecer la posición del flujo de nuevo al principio, utilizamos el cmdlet Get-FileHash
con el parámetro -InputStream
establecido en $stringAsStream
y el parámetro -Algorithm
establecido en MD5
. Este comando calcula la suma de verificación MD5
de la cadena proporcionada.
Salida:
Comparado con la primera sección de este artículo, el único cambio es que usamos -InputStream
en lugar de -Path
.
Como puedes ver en la salida, obtenemos el hash MD5
de nuestra cadena como resultado.
Uso de la Clase [System.Security.Cryptography.MD5]
en PowerShell
La clase [System.Security.Cryptography.MD5]
proporciona funcionalidad para calcular el valor hash MD5 de los datos. Esta clase es parte del espacio de nombres de Criptografía del .NET Framework y ofrece una solución robusta y eficiente para generar sumas de verificación MD5 en scripts de PowerShell.
La clase [System.Security.Cryptography.MD5]
proporciona un método llamado ComputeHash()
para calcular el valor hash MD5. La sintaxis es la siguiente:
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$md5
: Representa una instancia de la clase MD5 creada utilizando el métodoCreate()
.$hash
: Almacena el valor hash MD5 calculado.$data
: Especifica los datos para los cuales se debe calcular la suma de verificación MD5. Esto puede ser un array de bytes representando el contenido de un archivo o una cadena.
Aquí hay un ejemplo:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
En este fragmento de código, convertimos la cadena MD5Example
en un array de bytes utilizando [System.Text.Encoding]::UTF8.GetBytes()
. Luego, creamos una instancia de la clase MD5 utilizando [System.Security.Cryptography.MD5]::Create()
y llamamos al método ComputeHash()
para generar el valor hash MD5 para los datos proporcionados.
Finalmente, convertimos el valor hash a un formato de cadena utilizando [System.BitConverter]::ToString()
y eliminamos cualquier guion en la salida utilizando el operador -replace
.
Salida:
Uso de la Clase MD5CryptoServiceProvider
en PowerShell
La clase MD5CryptoServiceProvider
es parte del espacio de nombres de Criptografía del .NET Framework. Esta clase proporciona funcionalidad para calcular el valor hash MD5 de los datos utilizando el algoritmo criptográfico MD5.
La clase MD5CryptoServiceProvider
proporciona un método llamado ComputeHash()
para calcular el valor hash MD5. La sintaxis es la siguiente:
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$md5
: Representa una instancia de la claseMD5CryptoServiceProvider
creada utilizandoNew-Object
.$hash
: Almacena el valor hash MD5 calculado.$data
: Especifica los datos para los cuales se debe calcular la suma de verificación MD5. Esto puede ser un array de bytes representando el contenido de un archivo o una cadena.
Aquí hay un ejemplo:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
En este fragmento de código, convertimos la cadena MD5Example
en un array de bytes utilizando [System.Text.Encoding]::UTF8.GetBytes()
. Luego, creamos una instancia de la clase MD5CryptoServiceProvider
utilizando New-Object
y llamamos al método ComputeHash()
para generar el valor hash MD5 para los datos proporcionados.
Finalmente, convertimos el valor hash a un formato de cadena utilizando [System.BitConverter]::ToString()
y eliminamos cualquier guion en la salida utilizando el operador -replace
.
Salida:
Conclusión
PowerShell ofrece múltiples avenidas para calcular sumas de verificación MD5, cada una adecuada para diferentes escenarios y niveles de complejidad. Ya sea utilizando cmdlets integrados como Get-FileHash
, aprovechando el poder de clases .NET como System.Security.Cryptography.MD5
, o empleando proveedores criptográficos como MD5CryptoServiceProvider
, los usuarios de PowerShell tienen herramientas versátiles a su disposición para garantizar la integridad y seguridad de los datos.
Al comprender y utilizar estos métodos de manera efectiva, los scripts de PowerShell pueden manejar con confianza tareas que requieren sumas de verificación MD5 con precisión y fiabilidad.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn