I’m creating a file and to protect the integrity of it I would want to attach the MD5 checksum in the header.
Using the below script from Josep - Get-Hash, a powershell hash function I can get the MD5 checksum…But I’m just thinking that as soon as i generate it and then apply it to the header, the MD5 checksum has changed again…Is there a method to adding the checksum in the header without changing it by adding it to the header?
It would in theory look like…
Performed by: $username
Date: $date
MD5: $md5hash
everything else in the report below
Get-Hash "hello_world.txt"
Gets the SHA1 from myFile.txt file. When there's no explicit parameter, it uses -File
.EXAMPLE
Get-Hash -File "C:\temp\hello_world.txt"
Gets the SHA1 from myFile.txt file
.EXAMPLE
C:\PS> Get-Hash -Algorithm "MD5" -Text "Hello Wold!"
Gets the MD5 from a string
.EXAMPLE
C:\PS> "Hello Wold!" | Get-Hash
We can pass a string throught the pipeline
.EXAMPLE
Get-Content "c:\temp\hello_world.txt" | Get-Hash
It gets the string from Get-Content
.EXAMPLE
Get-ChildItem "C:\temp\*.txt" | %{ Write-Output "File: $($_) has this hash: $(Get-Hash $_)" }
This is a more complex example gets the hash of all "*.tmp" files
.NOTES
DBA daily stuff (http://dbadailystuff.com) by Josep Martínez Vilà
Licensed under a Creative Commons Attribution 3.0 Unported License
.LINK
Original post: http://dbadailystuff.com/2013/03/11/get-hash-a-powershell-hash-function/
#>
function Get-Hash
{
Param
(
[parameter(Mandatory=$true, ValueFromPipeline=$true, ParameterSetName="set1")]
[String]
$text,
[parameter(Position=0, Mandatory=$true, ValueFromPipeline=$false, ParameterSetName="set2")]
[String]
$file = "",
[parameter(Mandatory=$false, ValueFromPipeline=$false)]
[ValidateSet("MD5", "SHA", "SHA1", "SHA-256", "SHA-384", "SHA-512")]
[String]
$algorithm = "SHA1"
)
Begin
{
$hashAlgorithm = [System.Security.Cryptography.HashAlgorithm]::Create($algorithm)
}
Process
{
$md5StringBuilder = New-Object System.Text.StringBuilder 50
$ue = New-Object System.Text.UTF8Encoding
if ($file){
try {
if (!(Test-Path -literalpath $file)){
throw "Test-Path returned false."
}
}
catch {
throw "Get-Hash - File not found or without permisions: [$file]. $_"
}
try {
[System.IO.FileStream]$fileStream = [System.IO.File]::Open($file, [System.IO.FileMode]::Open);
$hashAlgorithm.ComputeHash($fileStream) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) }
}
catch {
throw "Get-Hash - Error reading or hashing the file: [$file]"
}
finally {
$fileStream.Close()
$fileStream.Dispose()
}
}
else {
$hashAlgorithm.ComputeHash($ue.GetBytes($text)) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) }
}
return $md5StringBuilder.ToString()
}
}