Jump to content
demyz0r

MD5 / SHA1

Recommended Posts

demyz0r

Boas pessoal, eu tenho um programa em JAVA que pego num zip e envio para o servidor via http, e quero fazer uma verificação MD5 ou SHA1 do lado do servidor, mas o ficheiro nunca chega lá com o mesmo MD5 ou SHA1 que foi enviado da máquina, é normal que haja alguma alteração do ficheiro pelo caminho?

Share this post


Link to post
Share on other sites
HappyHippyHippo
3 minutes ago, demyz0r said:

 é normal que haja alguma alteração do ficheiro pelo caminho?

não


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
demyz0r

O tamanho dos ficheiros são os mesmos, mas o MD5 no meu java, e depois no php do meu servidor não. O que me faz acreditar que foi feita alguma alteração, durante o "post".

Share this post


Link to post
Share on other sites
Knitter

Pode ser uma diferença nas duas implementações ou, mais simples, estarem a usar dados diferentes para fazerem o cálculo. Se estiveres a fazer o hash com o conteúdo do ficheiro, então têm de ser os dois iguais.

Share this post


Link to post
Share on other sites
demyz0r

Boas jota.fullstack, obrigado pelo link

Reparei agora, há uma alteração embora que muito pequena no tamanho do ficheiro.

Um 9,615,493 Bytes e o outro 9,615,451 Bytes. Mas a única diferença é que o maior apesar de ser igual ao mais pequeno, ele já foi enviado para o servidor via HTTP. Não percebo porquê a alteração de bytes, apenas com um envio.

Edited by demyz0r

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens a certeza que são iguais ?

qual o teu SO e qual o SO do servidor ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
demyz0r

Eles não são iguais  HappyHippyHippo, como disse no comentário anterior, eles diferem em bytes, embora que seja uma diferença muito pequena, no entanto chega para ver que o ficheiro não é igual ao outro, o que muda o MD5, e depois não consiga receber no servidor, porque faço a comparação dos MD5 para verificar se o ficheiro não foi alterado (com virus, etc).

No PC tenho o Windows 10, no servidor é um Windows server 2012 R2, isso poderá afectar?

Edited by demyz0r

Share this post


Link to post
Share on other sites
jota.fullstack
20 minutes ago, demyz0r said:

Boas jota.fullstack, obrigado pelo link

De nada :)

21 minutes ago, demyz0r said:

Reparei agora, há uma alteração embora que muito pequena no tamanho do ficheiro.

Um 9,615,493 Bytes e o outro 9,615,451 Bytes. Mas a única diferença é que o maior apesar de ser igual ao mais pequeno, ele já foi enviado para o servidor via HTTP. Não percebo porquê a alteração de bytes, apenas com um envio.

Será que não estás a adicionar nenhum header quando envias por http?

Consegues adicionar aqui o trecho de código do envio?

  • Vote 1

Share this post


Link to post
Share on other sites
jota.fullstack
10 minutes ago, demyz0r said:

No PC tenho o Windows 10, no servidor é um Windows server 2012 R2, isso poderá afectar?

Não afecta, para mim é como envias, deves estar mesmo a adicionar algum header ao ficheiro.

  • Vote 1

Share this post


Link to post
Share on other sites
demyz0r

Sim por acaso envio o header, mas não fazia ideia que isso alterava o tamanho do ficheiro. Eu poder posso, mas o codigo é VBA, so meti na parte do JAVA, porque como era uma pergunta generalista, e há mais pessoal a saber de JAVA, ia ser mais fácil para me responderem.

Share this post


Link to post
Share on other sites
HappyHippyHippo
1 minute ago, jota.fullstack said:

Não afecta, para mim é como envias, deves estar mesmo a adicionar algum header ao ficheiro.

errado, diferentes SO's e/ou diferentes sistemas de ficheiros diferentes apresentam tamanhos diferentes do mesmo ficheiros, se este tamanho for comparado através de ferramentas que apresentam o tamanho em disco (que difere de tamanho de dados)

por isso a pergunta é mais do que pertinente


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
jota.fullstack
10 minutes ago, HappyHippyHippo said:

errado, diferentes SO's e/ou diferentes sistemas de ficheiros diferentes apresentam tamanhos diferentes do mesmo ficheiros, se este tamanho for comparado através de ferramentas que apresentam o tamanho em disco (que difere de tamanho de dados)

por isso a pergunta é mais do que pertinente

Mas estamos a falar de windows 10 e windows server 2012 que têm o mesmo tratamento de ficheiros ;) Claro que não comparas um debian com Windows claramente. Mas já que fizeste essa pergunta pertinente posso explicar como tens diferentes tamanhos em diferentes SO(Windows vs Unix).

O windows assume que um Kilobyte tem 1024 bytes e um megabyte tem 1024 kilobytes, no caso do ubuntu ele assume que um Kilobyte tem 1000 bytes e um megabyte tem 1000 kilobytes.

Logo podemos dizer que o Windows usa o ‘binary prefix’, e o Ubuntu ou GNU/Linux, usa o que chamamos "proper foam". ;)

Editado: Mais informações podes pesquisar aqui: https://en.wikipedia.org/wiki/Binary_prefix#Adoption_by_IEC_and_NIST

Edited by jota.fullstack
  • Vote 1

Share this post


Link to post
Share on other sites
jota.fullstack

Mas como ele usa tecnologias Windows nada interfere.

8 minutes ago, demyz0r said:

Sim por acaso envio o header, mas não fazia ideia que isso alterava o tamanho do ficheiro. Eu poder posso, mas o codigo é VBA, so meti na parte do JAVA, porque como era uma pergunta generalista, e há mais pessoal a saber de JAVA, ia ser mais fácil para me responderem.

Podes adicionar o trecho de código? Acredito que seja isso.

  • Vote 1

Share this post


Link to post
Share on other sites
HappyHippyHippo
2 minutes ago, jota.fullstack said:

Mas estamos a falar de windows 10 e windows server 2012 que têm o mesmo tratamento de ficheiros ;) Claro que não comparas um debian com Windows claramente. Mas já que fizeste essa pergunta pertinente posso explicar como tens diferentes tamanhos em diferentes SO(Windows vs Unix).

O windows assume que um Kilobyte tem 1024 bytes e um megabyte tem 1024 kilobytes, no caso do ubuntu ele assume que um Kilobyte tem 1000 bytes e um megabyte tem 1000 kilobytes.

Logo podemos dizer que o Windows usa o ‘binary prefix’, e o Ubuntu ou GNU/Linux, usa o que chamamos "proper foam". ;)

sim, sabes que são esses sistemas operativos agora, depois de perguntar

já agora, deves estar a gozar comigo no que toca a explicar a diferença, não ? não só porque estás a assumir algo de estúpido (que não tem haver com os dados técnicos), como desconfio que seja a primeira resposta que podes encontrar no google


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
jota.fullstack

Amigo, eu quando disse que não afectava ele já tinha dado a resposta ;) Faz scroll e vê.

E quando refiro "dados técnicos" refiro a toda a gente deste fórum e não para ti exclusivamente. 

Como a questão do middleware e middleman? LOL que errei ao digitar no outro post. 

O que interessa é ajudar e como viste sou novo com este user :) 

Por isso vamos juntar os nossos conhecimentos e ajudar quem precisa de ser ajudado, tal como quando precisar quero ser ajudado.

E não enchas o tópico com assuntos que não interessam. Vamos focarmos no que é importante.

Edited by jota.fullstack
  • Vote 1

Share this post


Link to post
Share on other sites
demyz0r
48 minutos atrás, jota.fullstack disse:

Mas como ele usa tecnologias Windows nada interfere.

Podes adicionar o trecho de código? Acredito que seja isso.

Sim, esse é o meu código que faz o post do meu ficheiro para o servidor. 

Private Function pvPostFile(sUrl As String, sFileName As String, Optional ByVal bAsync As Boolean) As String
    Const STR_BOUNDARY  As String = "3fbd04f5-b1ed-4060-99b9-fca7ff59c113"
    Dim nFile           As Integer
    Dim baBuffer()      As Byte
    Dim sPostData       As String
 
   
    nFile = FreeFile
    Open sFileName For Binary Access Read As nFile
    If LOF(nFile) > 0 Then
        ReDim baBuffer(0 To LOF(nFile) - 1) As Byte
        Get nFile, , baBuffer
        sPostData = StrConv(baBuffer, vbUnicode)
    End If
    Close nFile
    
    sPostData = "--" & STR_BOUNDARY & vbCrLf & _
        "Content-Disposition: form-data; name=""uploadfile""; filename=""" & Mid$(sFileName, InStrRev(sFileName, "\") + 1) & """" & vbCrLf & _
        "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _
        sPostData & vbCrLf & _
        "--" & STR_BOUNDARY & "--"
    
    With CreateObject("Microsoft.XMLHTTP")
        .Open "POST", sUrl, bAsync
        .SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & STR_BOUNDARY
        .Send pvToByteArray(sPostData)
        If Not bAsync Then
            pvPostFile = .ResponseText
        End If
    End With
End Function

 Private Function pvToByteArray(sText As String) As Byte()
    pvToByteArray = StrConv(sText, vbFromUnicode)
End Function

 

Edited by demyz0r

Share this post


Link to post
Share on other sites
demyz0r
12 horas atrás, jota.fullstack disse:

Que tipo de ficheiro estás a utilizar?

Ficheiro zip, crio, meto os ficheiros que quero para o zip e envio-o de seguida.

Share this post


Link to post
Share on other sites
demyz0r

Se houver alguma maneira sem ser MD5 ou SHA1 de comparar ficheiros para verificar se são iguais também podes dizer, estou aberto a sugestões.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.