2012-01-02 6 views
8

Sto utilizzando un md5 per proteggere i miei post su un server back-end che esegue PHP. I parametri vengono inviati tramite HTTP Post.md5 con Android e PHP

Ho un problema, il risultato del mio calcolo md5 è diverso su Android e sul server PHP se c'è un ü, ä o ö in uno dei parametri di input.

Su Android, l'hash viene calcolato tramite questa funzione:

public static final String md5(final String s) { 
    try { 
     // Create MD5 Hash 
     MessageDigest digest = java.security.MessageDigest 
       .getInstance("MD5"); 
     digest.update(s.getBytes()); 
     byte messageDigest[] = digest.digest(); 

     // Create Hex String 
     StringBuffer hexString = new StringBuffer(); 
     for (int i = 0; i < messageDigest.length; i++) { 
      String h = Integer.toHexString(0xFF & messageDigest[i]); 
      while (h.length() < 2) 
       h = "0" + h; 
      hexString.append(h); 
     } 
     return hexString.toString(); 

    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    return ""; 
} 

sul server PHP ho semplicemente utilizzare

md5() function. 
+1

Suona come un problema di codifica (ISO-8859-1 contro UTF-8 per esempio). Quali set di caratteri stai usando? Puoi mostrare un po 'di codice? –

+0

certo, modifico il mio post. – tobias

+1

a proposito, potresti voler usare SHA1 o un altro algoritmo per proteggere i tuoi post ... MD% non è più sicuro –

risposta

7

Sembra che è necessario passare utf-8 stringa codificata a md5 in PHP:

md5(utf8_encode($string)); 
+0

Thx, questo mancava. – tobias

1

Potrebbe essere che si sta utilizzando charset di default della piattaforma.

Invece, provare:

digest.update(s.getBytes("UTF-8"); 
+0

Ho sostituito il mio digest.update() con il tuo, ma ho ancora lo stesso problema. Forse dovrò impostare UTF-8 su PHP? – tobias