Como sabe que sus tokens de texto simple son únicos (o al menos esto es una inferencia lógica) no necesita sal. La intención de la sal es únicamente proporcionar una singularidad de hash en el caso de contraseñas idénticas, pero como su espacio de entrada está destinado a ser único, no tiene este problema.
Además, ya que tienes control sobre la aleatoriedad y el tamaño de los textos, no necesitas preocuparte por que las contraseñas más débiles se descifren a través de medios tradicionales, por lo que bcrypt no es realmente necesario para ralentizar el proceso. Si su espacio de entrada es grande y aleatorio, solo puede hacer un hash con un hash criptográfico fuerte (por ejemplo, SHA256) sin sal. Esto le permite simplemente verificar si H(token)
está en la base de datos al generar un nuevo token (verificación de exclusividad).
El proceso para validar una solicitud de reinicio es bastante simple: tome la ID de usuario y el token de texto sin formato (como se proporciona en el enlace de reinicio) y verifique que coincidan en la base de datos computando H(token)
nuevamente.
De forma alternativa, si aún desea utilizar bcrypt, puede asegurar la exclusividad al anteponer el token aleatorio con el ID de usuario antes de pasarlo por bcrypt. Esto no requiere que verifique la singularidad (siempre será único debido al prefijo de ID) y aún así le permite verificar el token sin problemas.