Jeśli masz bezpieczny kryptograficznie generator liczb losowych, nie musisz haszować jego danych wyjściowych. W rzeczywistości nie chcesz. Po prostu użyj
$token = openssl_random_pseudo_bytes($BYTES,true)
Gdzie $ BYTES to dowolna liczba bajtów danych. MD5 ma 128-bitowy hash, więc wystarczy 16 bajtów.
Na marginesie, żadna z funkcji, które wywołujesz w oryginalnym kodzie, nie jest bezpieczna kryptograficznie, większość jest na tyle szkodliwa, że użycie tylko jednej z nich byłoby niebezpieczne, nawet w połączeniu z innymi bezpiecznymi funkcjami. MD5 ma problemy z bezpieczeństwem (chociaż w przypadku tej aplikacji mogą one nie mieć zastosowania). Uniqid nie tylko domyślnie nie generuje kryptograficznie losowych bajtów (ponieważ używa zegara systemowego), ale dodana entropia, którą przekazujesz, jest łączona za pomocą liniowego generatora przystającego, który nie jest bezpieczny kryptograficznie. W rzeczywistości prawdopodobnie oznacza to, że można by odgadnąć wszystkie klucze API, mając dostęp do kilku z nich, nawet jeśli nie mieliby pojęcia o wartości zegara serwera. Wreszcie, mt_rand (), której używasz jako dodatkowej entropii, również nie jest bezpiecznym generatorem liczb losowych.