Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jair Humberto

como calcular um md5

Recommended Posts

Olá pessoal,

 

Sou novato no .NET. Até hoje programei só no php e precisava calcular o md5 do conteudo de um arquivo.

no php basta isso:

 

$md5 = md5_file($arquivo, true)

agora, no .NET eu não estou conseguindo. Criei o método abaixo no vb.net:

 

Public Function md5_file(ByVal filepath As String, Optional ByVal raw_output As Boolean = False) As String
    Try

        If Not System.IO.File.Exists(filepath) Then
            Throw New Exception("Arquivo inexistente")
        End If

        Dim contentFile As System.IO.StreamReader
        contentFile = New System.IO.StreamReader(filepath)

        Dim btyScr() As Byte = System.Text.Encoding.Unicode.GetBytes(contentFile.ReadToEnd)
        contentFile.Close()

        Dim objMd5 As New MD5CryptoServiceProvider()
        Dim btyRes() As Byte = objMd5.ComputeHash(btyScr)
        Dim strResult As String = ""

        For i As Integer = 0 To btyRes.Length - 1
            If raw_output Then
                strResult += Convert.ToChar(btyRes(i))
            Else
                strResult += btyRes(i).ToString("x2").ToLower
            End If
        Next

        Return strResult

    Catch ex As Exception
        Return ex.Message
    End Try
End Function

O problema é que para arquivos de texto com caracteres comuns, o hash do .net é igual ao hash do php.

porém, para arquivos executáveis é diferente.

 

O que estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

De uma olhada de como ler arquivo textos: http://forum.imasters.com.br/index.php?/topic/277478-lendo-arquivos-texto/

E para criptografar em Mid5, basta:

 

FormsAuthentication.HashPasswordForStoringInConfigFile("SUA-STRING", "MD5");

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Estou usando o Visual Studio 2005 Copiei e colei o seu codigo aqui e não compilou. Ta dizendo que FormsAuthentication não foi declarado :/

 

eu consegui resolver o problema assim:

 

Public Function md5_file(ByVal filepath As String, Optional ByVal raw_output As Boolean = False) As String
    Try

        If Not System.IO.File.Exists(filepath) Then
            Throw New Exception("Arquivo inexistente")
        End If

        Dim fs As New System.IO.FileStream(filepath, IO.FileMode.Open) 'usando a classe FileStream em vez da StreamReader
        Dim md5 As New MD5CryptoServiceProvider
        md5.ComputeHash(fs) 'Calculando direto atraves do objeto
        fs.Close()

        Dim hashfinal As String = ""
        For i As Integer = 0 To md5.Hash.Length - 1
            If raw_output Then
                hashfinal += Convert.ToChar(md5.Hash(i))
            Else
                hashfinal += Convert.ToString(md5.Hash(i).ToString("x2"))
            End If
        Next

        Return hashfinal

    Catch ex As Exception
        Return ex.Message
    End Try
End Function

Agora o md5 do .net e do php batem mesmo de arquivos executáveis

 

vlw galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ha, deve ser mesmo. Mas eu também não sei o namespace certo o.O afinal, to engatinhando no .NET. Não sei nada cara, hehehe.

 

A propósito, alguém aí ja fez aquela assinatura (Registro EAD) do PAF ECF?

 

cara ta difícil, todo mundo ta usando Open SSL, ou a DLL da Bematech. Não consigo um vivo post que possa ter uma solução independente.

E eu queria uma solução independente. To tentando criar mas ta difícil, porque não entendi até agora a lógica desse negócio.

 

Eu achei uma classe em C# que realiza criptografia RSA, porém parece não ser a mesma do PAF, pois a chave pública do PAF não está em XML.

 

mesmo assim eu "traduzi" a classe C# pra vb.net pra ficar mais fácil. Será que alguém sabe algo a respeito disso? Ou já passou por isso?

 

Eu to perdidim da silva

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.