php 实现java md5加密
PHP 实现 Java MD5 加密
Java 和 PHP 的 MD5 加密结果可能存在差异,主要原因在于字符编码和字节处理方式不同。以下是确保 PHP 与 Java 生成相同 MD5 值的实现方法。
关键点
Java 的 MessageDigest 默认使用平台的字符编码(如 UTF-8),而 PHP 的 md5() 直接处理字符串的原始字节。需确保两者使用相同的字符编码和字节处理逻辑。

PHP 实现代码
function javaMd5($input) {
// 将字符串转换为 UTF-8 编码的字节数组
$bytes = mb_convert_encoding($input, 'UTF-8');
// 计算 MD5 哈希值
$hash = md5($bytes, true); // true 表示返回原始二进制数据
// 转换为 Java 风格的十六进制字符串(小写)
$hex = unpack('H*', $hash);
return $hex[1];
}
// 示例用法
$input = "HelloWorld";
echo javaMd5($input); // 输出与 Java 相同的 MD5 值
Java 参考代码
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Example {
public static String getMd5(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(input.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
String input = "HelloWorld";
System.out.println(getMd5(input));
}
}
注意事项
- 确保 PHP 和 Java 的输入字符串完全一致(包括大小写和空格)。
- 如果 Java 代码中使用了其他编码(如
getBytes("ISO-8859-1")),需在 PHP 中同步调整mb_convert_encoding的编码参数。 - 测试时建议使用非 ASCII 字符(如中文)验证编码兼容性。






