Ираклис должен быть прав. md5()
дает вам шестнадцатеричную строку вывода по умолчанию. Вы получите только незакодированные байты, как в Java, передав TRUE
для необязательного аргумента $raw_output
.
длина варьируется от 29 до 32
Тогда в вашем Java-коде есть ошибка. Хеши MD5 всегда 128 бит (32 шестнадцатеричные цифры). Вот оно:
hexString.append( Integer.toHexString(0xFF & message[ i ] ) );
это сгенерирует 1
вместо 01
для всех байтов ниже 16. Вы сохранили искаженный хеш, из которого вы не можете восстановить исходное значение MD5. Если вам абсолютно необходимо сохранить эти поврежденные данные, вам придется воспроизвести ошибку в PHP:
function makeBrokenMD5($s) {
$hash= md5($s, TRUE);
$bytes= preg_split('//', $hash, -1, PREG_SPLIT_NO_EMPTY);
$broken= '';
foreach ($bytes as $byte)
$broken.= dechex(ord($byte));
return $broken;
}