MD5 Hash question

This topic contains 2 replies, has 2 voices, and was last updated by  ertuu85 2 years ago.

  • Author
    Posts
  • #30282

    ertuu85
    Participant

    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 http://dbadailystuff.com/2013/03/11/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()
        }
    }
    
    
  • #30285

    Dave Wyatt
    Moderator

    Nope. As you say, adding any content to the file immediately changes the hash. Hashes are typically downloaded or sent out in a separate file.

  • #30286

    ertuu85
    Participant

    Ok, that's what I figured but just wanted to ask, just incase. Thanks!

You must be logged in to reply to this topic.