logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[VB] Niepoprawna suma MD5 dla pliku - co robię źle?

Bool2 16 Lis 2010 17:07 1803 4
REKLAMA
  • #1 8751277
    Bool2
    Poziom 11  
    Posty: 69
    Ocena: 8
    Pisze program do wyznaczenia sumy md5 dla pliku w VB problem mój jest taki że po wczytaniu pliku suma md5 nie zgadza się z żadnym kodem z innego programu.
    Męczę się 2 dni i nie wiem gdzie robię błąd.

        Private Sub bmd5pliku_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bmd5pliku.Click
            OpenFileDialog1.FileName = ""
            OpenFileDialog1.ShowDialog()
            Dim sciezka As New IO.FileInfo(OpenFileDialog1.FileName)
            Dim wielkosc As Integer = sciezka.Length
            txtsciezka.Text = sciezka.ToString
            txtmd5.Text = MD5(wielkosc.ToString)
        End Sub
    


    
        Private Function MD5(ByVal Content As String) As String
            Dim MD5 As New Security.Cryptography.MD5CryptoServiceProvider
            Dim ByteString() As Byte = System.Text.Encoding.ASCII.GetBytes(Content)
            ByteString = MD5.ComputeHash(ByteString)
            Dim FinalString As String = Nothing
            For Each bt As Byte In ByteString
                FinalString &= bt.ToString("x2")
            Next
            Return FinalString
    
        End Function
    
  • REKLAMA
  • #2 8753595
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Wydaje mi się dziwne, że do funkcji MD5 w pierwszym kodzie przekazujesz długość ścieżki do pliku...
  • REKLAMA
  • #3 8755814
    Bool2
    Poziom 11  
    Posty: 69
    Ocena: 8
    to może ktoś wie jaka funkcja w VB zwraca rozmiar wczytanego pliku w bitach
  • REKLAMA
  • #4 8757237
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Liczenie md5 dla pliku masz tutaj albo tutaj. Musisz przekazać do funkcji obliczającej cały plik, a nie jego długość/wielkość. Być może Twój kod też będzie działać, jeżeli wywołasz go tak:
    txtmd5.Text = MD5(sciezka)

    A odpowiadając na Twoje pytanie spróbuj tak:
    Sub Get_File_Size()
    
    File1 = "c:\temp\Sample.txt"
    
    MsgBox "The Size of the File is " & FileLen(File1) & " bytes"
    End Sub

    albo tak:
    Dim infoReader As System.IO.FileInfo
    infoReader = My.Computer.FileSystem.GetFileInfo("C:\testfile.txt")
    MsgBox("File is " & infoReader.Length & " bytes.")


    Te funkcje zwracają wynik w bajtach, ale 1 bajt = 8 bitów
  • #5 8840715
    Bool2
    Poziom 11  
    Posty: 69
    Ocena: 8
    Jeszcze jedno pytanie mam napisany program niby działa dobrze ale dla plików exe źle wyznacza sumę czy ktoś wie gdzie możne być wina. Czy przez to ze jest on otwierany ??


    Private Sub Command3_Click()
    CommonDialog2.DialogTitle = "Otwórz plik"
    CommonDialog2.InitDir = "c:\"
    CommonDialog2.filename = "Wybierz plik"
    CommonDialog2.CancelError = True
    On Error Resume Next
    CommonDialog2.ShowOpen
    If Err Then
        MsgBox "Nie wybrano pliku"
        Else
          Text2.Text = UCase(md5test.DigestFileToHexStr(CommonDialog2.filename))
    End If
    
    End Sub


    Public Function DigestFileToHexStr(filename As String) As String
        Open filename For Binary Access Read As #1
        MD5Init
        Do While Not EOF(1)
            Get #1, , ByteBuffer
            If Loc(1) < LOF(1) Then
                ByteCounter = ByteCounter + 64
                MD5Transform ByteBuffer
            End If
        Loop
        ByteCounter = ByteCounter + (LOF(1) Mod 64)
        Close #1
        MD5Final
        DigestFileToHexStr = GetValues
        
    End Function
REKLAMA