IP-MAN: MD5-Hash einer datei ermitteln..

Hallo Leute.
Ich möchte gerne von einer beliebigen Datei den MD5-HASH Wert.
Und zwar habe ich folgenden Code gefunden:
"

Imports System.Text
Imports System.IO

Public Function MD5FileHash(ByVal sFile As String) As String
    Dim MD5 As New MD5CryptoServiceProvider
    Dim Hash As Byte()
    Dim Result As String = ""
    Dim Tmp As String = ""

Dim FN As New FileStream(sFile, FileMode.Open, FileAccess.Read, _
      FileShare.Read, 8192)
    MD5.ComputeHash(FN)
    FN.Close()

Hash = MD5.Hash
    For i As Integer = 0 To Hash.Length - 1
        Tmp = Hex(Hash(i))
        If Len(Tmp) = 1 Then Tmp = "0" & Tmp
        Result += Tmp
    Next
    Return Result
End Function

Quelle:
http://dotnet-snippets.de/dns/den-md5-hash-einer-datei-ermitteln-SID77.aspx
"

Wenn man mit dieser Funktion eine größe Datei scannt, hängt der Prozess.
Mir wurde gesagt man soll die Funktion etwas umschreiben,
dass er nur noch z.B 350KB scannt und daraus einen MD5 Hash ermitteln kann.
Wer kann mir schnell den Code umschreiben, oder mir erklären wie ich das am besten
hinbekomme.
Vielen Dank an euch!
MFG
IP-MAN

  1. hi,

    Wer kann mir schnell den Code umschreiben, oder mir erklären wie ich das am besten

    Ich mach jetzt erstmal Kaffee. Du könntest Dir vielleicht mal die Read-Funktion anschauen...

    Hotti

  2. Ich habe nun eine lösung gefunden, vielen dank

    1. Ich habe nun eine lösung gefunden, vielen dank

      Kleine Ursache. Mach Dir klar, dass ein MD5-String eine Länge von 32 byte hat, das sind 256 bit und das ist der Informationsgehalt bzw. dessen Grenze. D.h., es hat überhaupt keinen Sinn, mehr als 32 byte Informationen von einer Datei einzulesen. Für eine Checksummenermittelung empfiehlt sich das Heranziehen der Dateilänge, das sind schonmal 32 bit als unsigned Integer. Nochmal 32 bit wäre der timestamp. Bleiben 192 byte, auf die ein Stück vom Dateiinhalt gehasht werden könnte.

      Schönen Sonntag,
      Horst Haschmisch

      1. Tach.

        Mach Dir klar, dass ein MD5-String eine Länge von 32 byte hat, das sind 256 bit und das ist der Informationsgehalt bzw. dessen Grenze. D.h., es hat überhaupt keinen Sinn, mehr als 32 byte Informationen von einer Datei einzulesen.

        Was erzählst Du denn hier für Zeug? Erstens berechnet MD5 einen 128-Bit-Wert und zweitens hängt der sehr wohl von mehr als den ersten 32 Byte (bzw. 16, wenn man Deiner Argumentation folgt) der Datei ab.

        --
        Always remember that you are unique. Just like everybody else.
      2. Hallo hotti.

        […], dass ein MD5-String eine Länge von 32 byte hat, das sind 256 bit und das ist der Informationsgehalt bzw. dessen Grenze. D.h., es hat überhaupt keinen Sinn, mehr als 32 byte Informationen von einer Datei einzulesen.

        Stimmt, der Output des MD5-Algorithmus ist fix bei 128 Bit.
        Aber wieso sollte dann der Input auch 128 Bit (oder 32 Byte oder was auch immer) groß sein?

        Servus,
        Flo

      3. Hi,

        Mach Dir klar, dass ein MD5-String eine Länge von 32 byte hat, das sind 256 bit und das ist der Informationsgehalt bzw. dessen Grenze. D.h., es hat überhaupt keinen Sinn, mehr als 32 byte Informationen von einer Datei einzulesen.

        Anruf für dich - Dieter Nuhr will mit dir sprechen!

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  3. Wenn man mit dieser Funktion eine größe Datei scannt, hängt der Prozess.

    Hängt "der Prozess" oder wartet das Script schlichtweg auf ein Resultat - das ist etwas völlig anderes.

    Mir wurde gesagt man soll die Funktion etwas umschreiben,
    dass er nur noch z.B 350KB scannt und daraus einen MD5 Hash ermitteln kann.

    Und was soll das bringen? Dann kannst du den Streuwert gleich aus dem Stand des Mondes oder der aktuellen Gemütslage deiner Katze errechnen.

    Der Sinn eines MD5-Hashes einer Datei ist es zu prüfen, ob die Datei sich verändert hat - um z.B. bei großen Downloads zu prüfen, ob die Datei vollständig ist.

    Bei einer Textfile welches immer wieder Zeilen hinzugefügt bekommt und größer als deine genannten 350 KB ist, bringt der der Hash genau nichts mehr.

    Unter Linux/Unix gibt es z.B. md5sum, auch unter Windows gibt es sicher entsprechende Commandline-Software die sich mit CScript oder WScript ausführen lässt.