sha256sum calcular powershell powershell-v2.0

calcular - Cómo obtener una suma de comprobación MD5 en PowerShell



powershell md5 (12)

Aquí están las dos líneas, simplemente cambie "hola" en la línea # 2:

PS C:/> [Reflection.Assembly]::LoadWithPartialName("System.Web") PS C:/> [System.Web.Security.FormsAuthentication]::HashPasswordForStoringInConfigFile("hello", "MD5")

Me gustaría calcular una suma de comprobación MD5 de algún contenido. ¿Cómo hago esto en PowerShell?


Aquí hay una función que uso que maneja rutas relativas y absolutas:

function md5hash($path) { $fullPath = Resolve-Path $path $md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $file = [System.IO.File]::Open($fullPath,[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read) try { [System.BitConverter]::ToString($md5.ComputeHash($file)) } finally { $file.Dispose() } }

Gracias a @davor anterior para la sugerencia de utilizar Open () en lugar de ReadAllBytes () y a @ jpmc26 para la sugerencia de utilizar un bloque finally.


Bonito ejemplo de impresión que intenta verificar la huella digital SHA256 gpg4win descargado v3.0.3 usando powershell v4 (requiere Get-FileHash )

Descargue el paquete desde https://www.gpg4win.org/download.html , abra powershell, tome el hash de la página de descargas y ejecute:

cd ${env:USERPROFILE}/Downloads $file="gpg4win-3.0.3.exe" # set $hash to the hash reference from the download page: $hash="477f56212ee60cc74e0c5e5cc526cec52a069abff485c89c2d57d1b4b6a54971" # if you have an MD5 hash: # $hashAlgo="MD5" $hashAlgo="SHA256" $computed_hash=(Get-FileHash -Algorithm $hashAlgo $file).Hash.ToUpper() if ( $computed_hash.CompareTo($hash.ToUpper()) -eq 0 ) { Write-Output "Hash matches for file $file" } else { Write-Output ( "Hash DOES NOT match for file {0}:`nOriginal hash: {1} `nComputed hash: {2}" -f ( $file, $hash.ToUpper(), $computed_hash ) ) }

Salida:

Hash matches for file gpg4win-3.0.3.exe


Ejemplo de opción de menú con el botón derecho también:

[HKEY_CLASSES_ROOT/*/shell/SHA1 PS check/command] @="C://Windows//system32//WindowsPowerShell//v1.0//powershell.exe -NoExit -Command get-filehash -algorithm SHA1 ''%1''"


Esta pregunta tiene casi 3 años, desde entonces, como algunos comentaron, hay una función Get-FileHash que es muy útil.

PS C:/> Get-FileHash C:/Users/Andris/Downloads/Contoso8_1_ENT.iso -Algorithm SHA384 | Format-List Algorithm : SHA384 Hash : 20AB1C2EE19FC96A7C66E33917D191A24E3CE9DAC99DB7C786ACCE31E559144FEAFC695C58E508E2EBBC9D3C96F21FA3 Path : C:/Users/Andris/Downloads/Contoso8_1_ENT.iso

Simplemente cambie SHA384 por MD5.

El ejemplo es de la documentación oficial de PowerShell 5.1 .

Supongo que esta respuesta es redundante de la respuesta de Keith-hill y la edición de la respuesta elegida, pero apunta a la documentación oficial y tiene un mejor ejemplo. La documentación tiene más ejemplos.


Este sitio tiene un ejemplo: http://blog.brianhartsock.com/2008/12/13/using-powershell-for-md5-checksums/ . Utiliza el framework .NET para instanciar una instancia del algoritmo hash MD5 para calcular el hash.

Aquí está el código del artículo, que incorpora el comentario de Stephen:

param ( $file ) $algo = [System.Security.Cryptography.HashAlgorithm]::Create("MD5") $stream = New-Object System.IO.FileStream($Path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read) $md5StringBuilder = New-Object System.Text.StringBuilder $algo.ComputeHash($stream) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) } $md5StringBuilder.ToString() $stream.Dispose()


Esto devolverá un hash MD5 para un archivo en una computadora remota:

Invoke-Command -ComputerName RemoteComputerName -ScriptBlock { $fullPath = Resolve-Path ''c:/Program Files/Internet Explorer/iexplore.exe'' $md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $file = [System.IO.File]::OpenRead($fullPath) $hash = [System.BitConverter]::ToString($md5.ComputeHash($file)) $hash -replace "-", "" $file.Dispose() }


Esto se convierte en un trazador de líneas si descarga FCIV de Microsoft.

Descargó el Verificador de integridad de suma de comprobación de archivos de Microsoft desde aquí https://support.microsoft.com/en-us/kb/841290

Ejecute el siguiente comando. Tenía diez archivos para verificar.

gci WTAM*.tar | % {./fciv $_.Name}


Hay muchos ejemplos en línea usando ComputeHash (). Mi prueba mostró que esto era muy lento cuando se ejecutaba a través de una conexión de red. El siguiente fragmento se ejecuta mucho más rápido para mí, sin embargo, YMMV:

$md5 = [System.Security.Cryptography.MD5]::Create("MD5") $fd = [System.IO.File]::OpenRead($file) $buf = new-object byte[] (1024*1024*8) # 8mb buffer while (($read_len = $fd.Read($buf,0,$buf.length)) -eq $buf.length){ $total += $buf.length $md5.TransformBlock($buf,$offset,$buf.length,$buf,$offset) write-progress -Activity "Hashing File" ` -Status $file -percentComplete ($total/$fd.length * 100) } # finalize the last read $md5.TransformFinalBlock($buf,0,$read_len) $hash = $md5.Hash # convert hash bytes to hex formatted string $hash | foreach { $hash_txt += $_.ToString("x2") } write-host $hash_txt


Otro comando integrado que se ha instalado desde hace mucho tiempo en Windows, que se remonta por defecto a 2003, es certutil, que también puede invocarse desde powershell.

CertUtil -hashfile file.foo MD5

(advertencia: MD5 debe estar en mayúsculas para máxima robustez)


Si el contenido es una cadena:

$someString = "Hello World!" $md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $utf8 = new-object -TypeName System.Text.UTF8Encoding $hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($someString)))

Si el contenido es un archivo:

$someFilePath = "C:/foo.txt" $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($someFilePath)))

Comenzando en PowerShell versión 4, esto es fácil de hacer para los archivos Get-FileHash cmdlet Get-FileHash :

Get-FileHash <filepath> -Algorithm MD5

Esto es ciertamente preferible ya que evita los problemas que ofrece la primera solución como se identifica en los comentarios (usa una secuencia, la cierra y admite archivos de gran tamaño).


Si está utilizando las extensiones de comunidad de PowerShell, hay un comando Get-Hash que lo hará fácilmente:

C:/PS> "hello world" | Get-Hash -Algorithm MD5 Algorithm: MD5 Path : HashString : E42B054623B3799CB71F0883900F2764