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.