2012-01-02 15 views
8

Używam md5 do zabezpieczenia moich postów do backendserver z PHP. Parametry są wysyłane za pośrednictwem HTTP Post.md5 z Androidem i PHP

Mam jeden problem, wynik mojego obliczenia md5 jest różny dla Androida i serwera PHP, jeśli istnieje ü, ä lub ö w jednym z parametrów wejściowych.

Na Androidzie hash oblicza tej funkcji:

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 ""; 
} 

na serwerze PHP po prostu użyć

md5() function. 
+1

Brzmi jak problem kodowania (ISO-8859-1 na przykład UTF-8). Z jakich zestawów znaków korzystasz? Czy możesz pokazać kod? –

+0

jasne, będę edytować mój post. – tobias

+1

przy okazji, możesz użyć SHA1 lub innego algorytmu, aby zabezpieczyć swoje posty ... MD% nie jest już bezpieczny –

Odpowiedz

7

Wygląda na to trzeba zdać UTF-8 zakodowany ciąg md5 w PHP:

md5(utf8_encode($string)); 
+0

Thx, tego brakowało. – tobias

1

Możliwe, że używasz domyślnego kodowania platformy.

Zamiast tego, spróbuj:

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

Zastąpiłem mój digest.update() twoim, ale wciąż mam ten sam problem. Być może muszę ustawić UTF-8 na PHP? – tobias