简体   繁体   中英

PHP MD5 not matching C# MD5

I have a hashing method in C# that looks like:

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] raw_input  = Encoding.UTF32.GetBytes("hello");
byte[] raw_output = md5.ComputeHash(raw_input);

string output = "";
foreach (byte myByte in raw_output)
    output += myByte.ToString("X2");

return output;

How can I implement this in PHP? Doing the following produces a different hash digest...

$output = hash('md5', 'hello');

You need to find out which encoding PHP is using to convert your string to text. It's very unlikely that it's using UTF-32. It may well be using the platform default encoding, or possibly UTF-8.

using (MD5 md5 = MD5.Create())
{
    byte[] input = Encoding.UTF8.GetBytes("hello");
    byte[] hash = md5.ComputeHash(input);
    return BitConverter.ToString(hash).Replace("-", "");
}

(This is the problem with languages/platforms which treat strings as binary data all over the place - it doesn't make it clear what's going on. There has to be a conversion to bytes here, as MD5 is defined for bytes, not Unicode characters. In the C# code you're doing it explicitly... in the PHP it's implicit and poorly documented.)

EDIT: If you've got to change the PHP, you could try this:

$text = mb_convert_encoding($text, "UTF-32LE");
$output = md5($text)

It depends whether PHP supports UTF-32 though...

PHP

This PHP code will do:

<?php
$str = "admin";
$strUtf32 = mb_convert_encoding($str, "UTF-32LE");
echo md5($strUtf32);
?>

This code outputs "1e3fcd02b1547f847cb7fc3add4484a5"

When you apply md5 to Encoding.UTF32.GetBytes("admin"); , that's same as

echo hash( "md5","a\0\0\0d\0\0\0m\0\0\0i\0\0\0n\0\0\0");
//1e3fcd02b1547f847cb7fc3add4484a5

In php.

You need to convert your string to UTF32-LE in PHP:

echo md5( mb_convert_encoding( "admin", "UTF-32LE" ) );
//1e3fcd02b1547f847cb7fc3add4484a5

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM