Просто используйте некоторую хеш-функцию с идентификатором пользователя, соль пользователя (вы солите пароль пользователя, верно?) И псевдослучайные данные - все в порядке:
$pwd_reset_hash = hash ( 'sha256' , $user_id . $user_salt, uniqid("",true));
Сохраните его в БД (вместе со временем запроса) в качестве ключа сброса для этого пользователя
user_id pwd_reset_hash time_requested
===========================================
123 ae12a45232... 2010-08-24 18:05
Когда пользователь пытается использовать его, проверьте, соответствует ли хеш пользователю и что время недавно (например, «код сброса действителен в течение 3 часов» или что-то в этом роде)
удалить его из БД, если он используется или срок его действия истек