将MD5Bytes和getBytes Java代码转换为PHP

时间:2016-09-09 09:13:36

标签: java php

我已经获得了这个需要转换为PHP的示例java代码

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==

1 个答案:

答案 0 :(得分:2)

在Java中,MD5Bytes返回MD5结果的普通字节,在PHP中,md5函数返回字节的人类可读的十六进制表示,因此得到完全相同的结果在Java中,您需要首先使用hex2bin

撤消二进制到十六进制的转换
$data_digest = base64_encode(hex2bin(md5($rawStr)));

应该给你完全相同的结果:Example