Я использую хеширование 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
значения различны, но данные являются одинаковыми в обоих файле. Что может вызвать эту разницу? Что мне делать, чтобы это исправить?
Вывести строку * перед ее хэшированием * на обоих языках. Они * точно такие же * (бит для бит)? –