2013-02-20 9 views
1

В моей программе я загружаю файл на свой сервер, используя Ftp из Java-программы, а затем сравниваю сумму MD5.MD5 дает разные результаты в PHP & JAVA

Загрузка работает отлично, и я получаю те же суммы md5. Но php-версия имеет «0» до той же суммы md5. Почему это так?

Php: 0e9e9399840d9a9368b53d3df98a6a2f 
Java: e9e9399840d9a9368b53d3df98a6a2f 
+1

Эти два укуса представляют собой только шестнадцатеричное представление двух 128-битных чисел. Я думаю, что разница заключается в преобразовании из значения байтового массива в строку. Но оба значения * numeric * идентичны (поэтому '0e' равно просто' e' в шестнадцатеричном представлении, '1110' в двоичном представлении). – Tom

ответ

4

Они одинаковые, это просто PHP добавляет значение с дополнительным 0 спереди, поэтому он всегда 16 символов.

Подумайте о том, что хэш как число в шестнадцатеричном виде - он может быть дополнен, поэтому всегда будет одинаковое количество цифр (потому что оно никогда не превышает 16 цифр), но это необязательно. Это немного похоже на сравнение чисел 209 и 0209.

+0

Спасибо, тогда я могу вырезать это «0» или это всегда важный персонаж? – bbholzbb

+0

Спасибо. Я всегда сравниваю строки md5 как строки - в будущем буду сравнивать шестнадцатеричные числа – meouw

+0

Что касается данных, которые вы можете разрезать - это лишнее, если вы сравниваете как шестнадцатеричные числа, а не строки (что вы должны быть). Если вы сравнивая как строки, то это, очевидно, важно. – berry120

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