Почему в php и java получаются разные md5?
Вот здесь: utf8_string.getBytes() не задана явно кодировка UTF-8, поэтому используется дефолтная кодировка платформы. Если нужно, чтобы PHP-скрипт выдавал такую же сумму, как java, задайте в нем соответствующую вашей платформе кодировку, в вашем случае это "ISO-8859-1"
правильно предполагаете
смотрите, как сделано в Питоне - никаких кодировок:
https://docs.python.org/3/library/hashlib.html