Якщо у вас є криптографічно захищений генератор випадкових чисел, вам не потрібно хешувати його вихідні дані. Насправді ви цього не хочете. Просто використовуйте
$token = openssl_random_pseudo_bytes($BYTES,true)
Де $ BYTES - це, однак, багато байт даних, які ви хочете. MD5 має 128-бітний хеш, тож підійде 16 байт.
Як додаткове зауваження, жодна з функцій, які ви викликаєте у своєму вихідному коді, не є криптографічно безпечною, більшість з них достатньо шкідливі, так що використання лише однієї з них може бути небезпечним, навіть якщо поєднуватись із захищеними іншими функціями. MD5 має проблеми з безпекою (хоча для цієї програми вони можуть бути не актуальними). Uniqid не просто не генерує криптографічно випадкові байти за замовчуванням (оскільки він використовує системний годинник), додана ентропія, яку ви передаєте, поєднується за допомогою лінійного конгруентного генератора, який не є криптографічно безпечним. Насправді це, мабуть, означає, що можна здогадатися про всі ваші ключі API, отримавши доступ до кількох з них, навіть якщо вони навіть не підозрювали про значення годинника вашого сервера. Нарешті, mt_rand (), що ви використовуєте як додаткову ентропію, теж не є надійним генератором випадкових чисел.