php 实现java md5加密
PHP 实现 Java MD5 加密的兼容方法
Java 和 PHP 的 MD5 加密结果可能存在差异,主要源于字符编码和输出格式的处理方式不同。以下是确保两者结果一致的实现方法:
关键点:字符编码统一
Java 默认使用 UTF-16 或平台默认编码,而 PHP 通常使用 UTF-8。需在 PHP 中明确指定 UTF-8 编码:

$input = "需要加密的字符串";
$md5Hash = md5($input);
处理 16 进制大小写
Java 的 MessageDigest 通常返回小写 16 进制字符串,PHP 的 md5() 默认返回小写。若需大写结果:

$md5HashUpper = strtoupper(md5($input));
完整兼容示例
以下 PHP 代码模拟 Java 的 MD5 实现逻辑:
function javaCompatibleMd5($input) {
// 转换为 UTF-8 字节数组(模拟 Java getBytes())
$bytes = mb_convert_encoding($input, 'UTF-8');
// 计算 MD5 哈希(二进制格式)
$hash = md5($bytes, true);
// 转换为 16 进制字符串(小写)
$hex = bin2hex($hash);
return $hex;
}
// 使用示例
$javaStyleHash = javaCompatibleMd5("test123");
echo $javaStyleHash; // 输出与 Java 相同的结果
验证一致性
Java 等效代码参考:
import java.security.MessageDigest;
public class Main {
public static void main(String[] args) throws Exception {
String input = "test123";
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hash = md.digest(input.getBytes("UTF-8"));
StringBuilder hex = new StringBuilder();
for (byte b : hash) {
hex.append(String.format("%02x", b));
}
System.out.println(hex.toString()); // 输出应与 PHP 结果一致
}
}
注意事项
- 双方必须使用相同的字符串编码(推荐 UTF-8)
- 避免在字符串中包含 BOM 头
- 二进制模式(
md5($input, true))需谨慎处理字节顺序





