Java md5与PHP md5不同。两者都返回不同的值?

时间:2014-05-09 04:37:41

标签: java php hash md5

我在java中有以下方法,并在PHP中查找等效项。

JAVA CODE:

public static String convertToHash(String strToHash)
  {
    try {
      MessageDigest md = MessageDigest.getInstance("MD5");
      byte[] md5Hash = null;
      md.update(strToHash.getBytes("iso-8859-1"), 0, strToHash.length());
      md5Hash = md.digest();
      return convertToHex(md5Hash);
    } catch (Exception e) {
      logger.error("Exception in convertToHash for value : " + strToHash + " : " + e);
    }
    return strToHash;
  }

  private static String convertToHex(byte[] data) {
    StringBuffer sb = new StringBuffer();
    for (byte b : data) {
      int halfByte = b >>> 4 & 0xF;
      int two_halfs = 0;
      do
      {
if ((0 <= halfByte) && (halfByte <= 9))
    sb.append((char)(50 + halfByte));
    else
          sb.append((char)(97 + (halfByte - 10)));
        halfByte = b & 0xF;
      }while (two_halfs++ < 1);
    }
    return sb.toString();
  }

提前感谢您的帮助。

此致 姆兰

1 个答案:

答案 0 :(得分:1)

Php具有md5()函数,您可以使用开箱即用的文件字符串在php中存储为二进制文件。 php不支持utf-8所以你对iso格式的好处。

md5 documentation

示例md5:

$myStr = "Yo yo my dude";

$hash = md5( $myStr );

样本到十六进制:

$str = "some txt";

$hexStr = bin2hex($str);

bin2hex documentation

样品包()

$str = "my name is jorge";

$hex = pack("H*", $str); // highest nibble first use h* for lowest this is endianness

另见pack()方法

你可以这样做,把它变成你需要的东西。

$str = "hash me up";

$hash = md5($str);

$size = strlen($hash);
$bits = null;

for($i = 0; $i < $size; $i++)
{
$bits .= decbin( ord( $hash[$i] ) );
}

$hex = unpack( "H*", $bits );

decbin()

ord()

unpack