Nếu bạn có trình tạo số ngẫu nhiên an toàn bằng mật mã, bạn không cần băm đầu ra của nó. Trong thực tế, bạn không muốn. Chỉ dùng
$token = openssl_random_pseudo_bytes($BYTES,true)
Tuy nhiên $ BYTES là bao nhiêu byte dữ liệu bạn muốn. MD5 có một băm 128 bit, vì vậy 16 byte sẽ làm được.
Lưu ý thêm, không có chức năng nào bạn gọi trong mã gốc của mình là an toàn về mặt mật mã, hầu hết đều có hại đến mức chỉ sử dụng một chức năng sẽ không an toàn ngay cả khi kết hợp với các chức năng bảo mật khác. MD5 có vấn đề về bảo mật (mặc dù đối với ứng dụng này, chúng có thể không liên quan). Uniqid không chỉ không tạo ra các byte ngẫu nhiên mã hóa theo mặc định (vì nó sử dụng đồng hồ hệ thống), entropy được thêm vào mà bạn chuyển vào được kết hợp bằng cách sử dụng bộ tạo đồng dư tuyến tính, không an toàn về mặt mật mã. Trên thực tế, nó có thể có nghĩa là người ta có thể đoán tất cả các khóa API của bạn được cấp quyền truy cập vào một vài trong số chúng ngay cả khi họ không biết giá trị của đồng hồ máy chủ của bạn. Cuối cùng, mt_rand (), thứ mà bạn sử dụng làm entropy bổ sung, cũng không phải là một trình tạo số ngẫu nhiên an toàn.