Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[VB] suma md5 dla wczytanego pliku

16 Nov 2010 17:07 1470 4
  • Level 11  
    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.

    Code:
        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


    Code:

        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
  • Level 40  
    Wydaje mi się dziwne, że do funkcji MD5 w pierwszym kodzie przekazujesz długość ścieżki do pliku...
  • Level 11  
    to może ktoś wie jaka funkcja w VB zwraca rozmiar wczytanego pliku w bitach
  • Level 40  
    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:
    Code:
    txtmd5.Text = MD5(sciezka)

    A odpowiadając na Twoje pytanie spróbuj tak:
    Code:
    Sub Get_File_Size()
    

    File1 = "c:\temp\Sample.txt"

    MsgBox "The Size of the File is " & FileLen(File1) & " bytes"
    End Sub

    albo tak:
    Code:
    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
  • Level 11  
    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 ??


    Code:
    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


    Code:
    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