MD5 Hash question

This topic contains 2 replies, has 2 voices, and was last updated by Profile photo of ertuu85 ertuu85 1 year, 10 months ago.

  • Author
    Posts
  • #30282
    Profile photo of ertuu85
    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
    Profile photo of Dave Wyatt
    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
    Profile photo of ertuu85
    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.