2015-04-18 4 views
2

Я использую хеширование MD5 перед отправкой данных из приложения на сервер.MD5 хеширование разных значений

Java код:

String hash = ""; 
    String name = nameText.getText(); 
    try{ 
     MessageDigest md = MessageDigest.getInstance("MD5"); 
     md.update((name + score + HASH_SALT).getBytes()); 
     byte byteData[] = md.digest(); 

     StringBuffer sb = new StringBuffer(); 
     for (int i = 0; i < byteData.length; i++) { 
      sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); 
     } 
     hash = sb.toString(); 
    } catch (Exception e) { 
     hash = ""; 
    } 


    try { 
     String urlParameters = PARAM_NAME + name + PARAM_SCORE + score + PARAM_HASH + hash; 
     URL url = new URL(HIGHSCORES_ADD + urlParameters); 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.getInputStream(); 
     urlConnection.disconnect(); 
    } catch (Exception e){ 
     Gdx.app.log("HighScores", "Could not submit score" + e.getMessage()); 
    } finally { 
     ((Game)Gdx.app.getApplicationListener()).setScreen(new MainMenu()); 
    } 

PHP код:

<?php 
     $db = mysql_connect("host", "root", "password") or die('Could not connect: ' . mysql_error()); 
     mysql_select_db("db1") or die('Could not select database'); 

     $score = (int)$_GET['score']; 
     $hash = $_GET['hash']; 
     $name = mysql_real_escape_string($_GET['name'], $db); 
     $timestamp = date("Y-m-d H:i:s"); 
     $secretKey="mySecretKey"; 

     $real_hash = md5($score . $hash . $secretKey); 

     if($real_hash == $hash) { 
      $query = "INSERT INTO highscores (id, date, score, name) VALUES (NULL, '$timestamp', '$score', '$name')"; 
      $result = mysql_query($query) or die('Query failed: ' . mysql_error()); 
     } 
    ?> 

В PHP кода $hash и $real_hash значения различны, но данные являются одинаковыми в обоих файле. Что может вызвать эту разницу? Что мне делать, чтобы это исправить?

+2

Вывести строку * перед ее хэшированием * на обоих языках. Они * точно такие же * (бит для бит)? –

ответ

0
md.update((name + score + HASH_SALT).getBytes()); 

Строка в md.update() отличается от строки в md5() в коде PHP, так что вы не можете получить тот же хэш.

$real_hash = md5($score . $hash . $secretKey); 
+0

Спасибо, в этом была проблема! –

Смежные вопросы