Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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
OK, fala que não foi declarado por que você tem que adicionar a namespace dele.
Abraços...
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
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...