[JAVA/PHP] Consequente MD5 Check-sum verschillen.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi.

Voor school ben ik bezig met het maken voor een Up- en Downloader, in Java. Deze communiceert met een Apache server, die dus op PHP draait. Om er 100% zeker van te zijn dat de data die wordt aangevraagd en de data die daadwerkelijk wordt verzonden gelijk zijn, bouw ik er een MD5 checksum in. Dit levert echter consequente verschillen op. Zie hier de (relevante) code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// MD5 klasse, rechtstreeks van internet geplukt maar hij ziet er correct uit
import java.security.*;

public class MD5 {
    public String getMD5( byte[] input) {
        byte[] defaultBytes = input;
        try{
            MessageDigest algorithm = MessageDigest.getInstance("MD5");
            algorithm.reset();
            algorithm.update(defaultBytes);
            byte messageDigest[] = algorithm.digest();
                    
            StringBuffer hexString = new StringBuffer();
            for (int i=0;i<messageDigest.length;i++) {
                hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
            }
            System.out.println("MD5: "+hexString.toString());
            return hexString.toString();
        } catch( NoSuchAlgorithmException e ){
            System.out.println("MD5 checksum failed: No Such Algorithm.");
            return "-1";
        }
    }
}
Java:
1
2
3
4
5
6
7
8
9
InputStream is = new FileInputStream( file );
bytes = new byte[byteArraySize];
is.read(bytes, 0, byteArraySize);

md5handler = new MD5();
md5 = md5handler.getMD5(bytes);

/* vervolgens worden de variabele bytes en MD5 beiden middels HTTPClient naar het PHP
gedeelte verzonden, zie hieronder.


PHP:
1
$md5 = md5($bytes);// waarin $bytes het deel van de binary vertegenwoordigd

De MD5 code die ik van PHP terug krijg, is iedere keer verschillend van de uitkomst die ik van Java terug krijg. Beide uitkomsten zijn (logischerwijs) steeds hetzelfde t.o.v. zichzelf, wanneer ik een bepaald pakket een aantal keer her-verzend.
Het lijkt me aannemelijk dat de MD5 van PHP hoe dan ook goed moet zijn, aangezien deze al verschillende PHP versies heeft overleeft. meest logisch is een fout in het Java gedeelte, maar ik kan niet zien waar. Iemand die dit wel ziet?
Opmerkelijk detail is overigens dat naast deze upload module ook een download module is, waar ik een zelfde fout in heb.

BVD Jan

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

D'r wordt niet ergens een conversie gedaan tussen UNIX en Windows line-endings?

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Optix
  • Registratie: Maart 2005
  • Laatst online: 12-08 19:46
Geven Java en PHP wel exact zelfde bytes?

[ Voor 135% gewijzigd door Optix op 26-10-2008 01:06 ]

.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CyBeR schreef op zondag 26 oktober 2008 @ 00:52:
D'r wordt niet ergens een conversie gedaan tussen UNIX en Windows line-endings?
Nee, maar aangezien ik met audio en video bestanden werk, die feitelijk uit een lange lijn bestaan, komen er geen line ends in voor.
Optix schreef op zondag 26 oktober 2008 @ 00:56:
Geven Java en PHP wel exact zelfde bytes?
Zit geen verschil in.

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Verwijderd schreef op zondag 26 oktober 2008 @ 01:11:
[...]

Nee, maar aangezien ik met audio en video bestanden werk, die feitelijk uit een lange lijn bestaan, komen er geen line ends in voor.
Als jij denkt dat er in videobestanden geen bytes met waardes gelijk aan line-endings staan heb je 't mis hoor. Waarom denk je dat je op windows moet aangeven dat je een file 'binary' moet openen als 't geen text file is?

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CyBeR schreef op zondag 26 oktober 2008 @ 01:15:
[...]


Als jij denkt dat er in videobestanden geen bytes met waardes gelijk aan line-endings staan heb je 't mis hoor. Waarom denk je dat je op windows moet aangeven dat je een file 'binary' moet openen als 't geen text file is?
Okay, mee eens.
Maar mijn (test)server draait verder ook op windows. Zou dat probleem voor mij van toepassing zijn dan?

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Verwijderd schreef op zondag 26 oktober 2008 @ 01:27:
[...]

Okay, mee eens.
Maar mijn (test)server draait verder ook op windows. Zou dat probleem voor mij van toepassing zijn dan?
Nou ja, als die data byte-for-byte hetzelfde is dan blijkbaar niet. Dan mag je er van uitgaan dat een van de implementaties van MD5 fout is.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Als je googled op java md5 is de eerste hit een snellere implementatie, en staat bij de 2e hit een opmerking:
if you use Integer.toHexString(int a), if a>=0 and a<=15 you will get a String consisting of only one char!!!!
En de derde hit ziet er ook veelbelovend uit ;)

Dus (volgens derde hit):
Java:
1
2
3
4
5
6
7
8
9
10
11
import java.security.*;
import java.math.*;

public class MD5 {
    public static void main(String args[]) throws Exception{
        String s="apple";
        MessageDigest m=MessageDigest.getInstance("MD5");
        m.update(s.getBytes(),0,s.length());
        System.out.println(new BigInteger(1,m.digest()).toString(16));
    }
}

Output 1f3870be274f6c49b3e31a0c6728957f

[ Voor 51% gewijzigd door pedorus op 26-10-2008 16:05 ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Ben je wel zeker dat je het volledige bestand inleest? Normaal gezien gebruik je een loop om dat te doen.

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Ik heb hierop al antwoord gegeven: http://forums.sun.com/thread.jspa?threadID=5342711.

't Is niet zo netjes om te crossposten :/
Pagina: 1