我只是用PHP编写代码
$hash = md5("testtesttest", TRUE);
echo $hash.'<br>';
$hash = md5($hash . "test", TRUE);
echo $hash.'<br>';
在java中使用2行fisrt,它与我的代码一起工作
public static void main(String[] args) {
// String str = new String(md5x16("test"));
byte[] input = md5x16("testtesttest");
String t = new String(input);
System.out.println(t);
}
public static byte[] md5x16(String text) {
try {
MessageDigest digester = MessageDigest.getInstance("MD5");
digester.update(text.getBytes());
byte[] md5Bytes = digester.digest();
return md5Bytes;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
但是在PHP的第3行和第4行中,我不能在Java中做同样的事情 如果我解析为String并添加&#34; test&#34;对它来说,我将用PHP获得另一个结果
答案 0 :(得分:2)
Iraklis应该是对的。默认情况下,md5()为您提供十六进制编码的输出字符串。您只能通过为可选的$ raw_output参数传递TRUE来获取Java中未编码的字节。
长度范围从29到32
hexString.append( Integer.toHexString(0xFF & message[ i ] ) );
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;
}`