Та же строка, но не то же самое на всех - PullRequest
1 голос
/ 01 марта 2011

Я программирую как на JAVA, так и на PHP. У меня есть одна проблема со сравнением строк. На самом деле две одинаковые строки (на мой взгляд) не одинаковы в соответствии с JAVA.

Предыстория проблемы:

Я установил печенье, используя $userid_hash = sha1($row["profileId"].'helloworld'); вместе с $userid = $row["profileId"]. Это сделано для предотвращения доступа пользователя к другой учетной записи.

Проблема сейчас в том, что у меня есть некоторый серверный код, написанный на JAVA, который хэширует userid и сравнивает его с userid_hash. Я печатаю их в консоли. Обе строки идентичны.

Но дело в том, что я обернул оставшуюся часть кода вокруг оператора if в случае любых попыток мошенничества. И java интерпретирует строки как не одинаковые, даже если они есть, согласно моей консоли в Eclipse. Что может быть источником этой проблемы?

Я использую это как мой хэш SHA1 Синтаксис неверен с моим кодом SHA1 . Я звоню, используя "somestring".getBytes("UTF-8");. И моя база данных MySQL имеет кодировку UTF-8, а все строки, которые я ввожу в Eclipse, также кодируются в формате UTF-8. Что я сделал не так? Как я могу найти проблему?

EDIT:

Это оператор println в java перед сравнением:

ab968f939a4869339b5cdb611674bdf4954f2f6a ab968f939a4869339b5cdb611674bdf4954f2f6a

EDIT:

Если заявление:

if(packageName.toSHA1((profileId+"secret").getBytes("UTF-8")) == profileId_ver)

1 Ответ

12 голосов
/ 01 марта 2011

Вы используете .equals () вместо ==?== для строк проверяет, что они находятся в одном и том же месте в памяти, тогда как .equals () проверяет, что они состоят из одной и той же последовательности символов (что вам и нужно).

Хорошо:

if(string1.equals(string2))

Плохо:

if(string1 == string2)
...