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