2016-09-09 2 views
1

Я получил этот пример кода Java, что мне нужно преобразовать в PHPПреобразование MD5Bytes и GetBytes Java код PHP

JAVA

String rawStr = logistics_interface + signKey; 
String data_digest = new String(Base64.encodeBase64(MD5Bytes(rawStr.getBytes("utf-8"))), "utf-8"); 

Я использовал этот PHP:

$rawStr = $logistics_interface . $signKey; 
$data_digest = base64_encode(md5(utf8_encode($rawStr))); 

Использование этих контрольных значений:

$logistics_interface = '<order>helloworld</order>'; 
$signKey = '123'; 

Мой PHP код дает:

ZWUwNGZmMWU2MTQ1NGRmOTcwN2U2ZmY3MmNlMjlkOTk= 

Но мне говорят поставщиком API, что правильное значение $ data_digest должно быть:

7gT/HmFFTflwfm/3LOKdmQ== 

ответ

2

В Java, MD5Bytes возвращает простые байты Результат MD5, в PHP функция md5 возвращает человеко-читаемое шестнадцатеричное представление байтов, следовательно, чтобы получить тот же самый результат, который вы получаете на Java, вам нужно указать undo преобразование двоичного кода в шестнадцатеричное сначала с hex2bin

$data_digest = base64_encode(hex2bin(md5($rawStr))); 

должен дать вам тот же результат: Example

+0

ты герой. Спасибо. Он работает отлично. – Chris

+0

@tkausl У меня есть вопрос, не могли бы вы мне помочь? В Java я вижу: 'System.out.println ("привет мир" .getBytes ("UTF-8"))' имеет результат '[B @ a67c67e' Как я могу иметь этот результат в PHP? Спасибо – Khaihkd

+0

@Khaihkd Я не уверен, что вы пытаетесь сделать. '[B @ a67c67e' генерируется методом' toString' по умолчанию, это __not__ содержимое массива байтов. Попробуйте 'System.out.println (Arrays.toString (« hello world ».getBytes (« UTF-8 »)))' для печати массива. – tkausl