2012-01-02 2 views
8

Я использую md5 для защиты своих сообщений на сервере backend, работающем под управлением PHP. Параметры отправляются через HTTP-сообщение.md5 с Android и PHP

У меня есть одна проблема: результат вычисления md5 отличается от Android и PHP-сервера, если в одном из входных параметров есть ü, ä или ö.

На Android, хэш вычисляется с помощью этой функции:

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

на сервере PHP я просто использую

md5() function. 
+1

Звучит как вопрос кодирования (ISO-8859-1 против UTF-8, например). Какие наборы символов вы используете? Можете ли вы показать код? –

+0

уверен, я отредактирую свое сообщение. – tobias

+1

, кстати, вы можете использовать SHA1 или другой алгоритм для защиты ваших сообщений ... MD% больше не защищен –

ответ

7

Похоже, вам нужно пройти UTF-8 закодированную строку md5 в PHP:

md5(utf8_encode($string)); 
+0

Thx, этого не было. – tobias

1

Это может быть, что вы используете по умолчанию кодировку платформы.

Вместо этого попробуйте:

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

Я заменил свой digest.update() вашим, но у меня все еще такая же проблема. Возможно, мне нужно установить UTF-8 на PHP? – tobias