Feedback

VB - Den MD5 Hash einer Datei ermitteln

Veröffentlicht von am 6/3/2006
(1 Bewertungen)
Den MD5 Hash einer Datei ermitteln
Imports System.Security.Cryptography
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
Abgelegt unter MD5, Hash, Datei.

4 Kommentare zum Snippet

Zen schrieb am 4/28/2007:
Wenn man die For/Next-Schleife mit dieser Zeile ersetzt, ist der Code nochmal bisschen kürzer ;)
Result = Strings.Replace(BitConverter.ToString(Hash), "-", "")
Tim Hartwig schrieb am 4/28/2007:
Super das ist natürlich viel besser. Danke für den Tipp!
General Bison schrieb am 4/17/2008:
Hi
ich habe eine andere Methode gefunden, die allerdings einen ganz anderen Hashwert liefert, dafür aber VIEL SCHNELLER IST!
Ich habe aber leider KEINE AHNUNG von der Mathematik, die dahinter steht...
Wäre schön, wenn das mal jemand mit mehr Ahnung als ich unter die Lupe nimmt

Folgende Zeitmessungen habe ich bei einer 1.1 GB großen Datei gemacht
(jeweils Min und Maxwert):

activevb:
"55243ECF175013CFE9890023F9FD9037"
ElapsedTicks = 188235
ElapsedTicks = 349

Tim Hartwig:
"FAE29D6C14FA1A3E405AEFCC96959040"
ElapsedTicks = 136619208
ElapsedTicks = 40328337

http://www.activevb.de/rubriken/faq/faq0137.html

Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes("Hallo Welt!")
Dim md5 As New System.Security.Cryptography.MD5CryptoServiceProvider()
Dim result As Byte() = md5.ComputeHash(data)
Dim ret As String
ret = Strings.Replace(BitConverter.ToString(result), "-", "")
General Bison schrieb am 4/17/2008:
Hat sich erledigt....
Ich hab nen fehler gemacht und einmal ZUVIEL auf Rückgängig geklickt....
 
System.Text.Encoding.UTF8.GetBytes("Hallo Welt!")

klar geht das schnell... sry für die überflüssigen Posts
 

Logge dich ein, um hier zu kommentieren!