How can I use PHP’s mhash functions to generate a key from a string?

Solution :

When using mhash() with MHASH_SHA256, the output is always a fixed 32-byte string, regardless of the input length:

php > var_dump(mhash(MHASH_SHA256, 'blah'));
string(32) "?}?C?qnϥ?0/kB???R??e?`0?R"

php > var_dump(mhash(MHASH_SHA256, 'blahadfadf'));
string(32) "t?+jm~8??f?vD???'?R????a:??巯"

php > var_dump(mhash(MHASH_SHA256, 'blasdfafadf'));
string(32) "<?Z,?????,m???\5k??i???B???"

php > var_dump(mhash(MHASH_SHA256, 'blasasdfasdfasdfasf'));
string(32) "?]?,5Þظ?&x??T{?8?]?5??  Y?"

php > var_dump(mhash(MHASH_SHA256, 'blasasdfasdfasdfasfadfjads;fkjas;ldkfjas;dkjfa;sdjkf'));
string(32) "j?̳ebb??Z'??????9??^s???F"

Key Points:

Fixed-length output: SHA-256 always produces 32 bytes, regardless of input length.

The output may appear as binary characters, not readable ASCII.

To convert it into a readable format, you can use bin2hex():


echo bin2hex(mhash(MHASH_SHA256, 'blah'));
// Output: 8d969eef6ecad3c29a3a629280e686cff8ca8...

✅ This is expected behavior for hash functions: they always return a fixed-size digest.